Jas*_*per 3 python dataframe pandas pandas-groupby
我有一个按年份列出的国家/地区列表,就像这样
country year founding_year other_vars
Fake 1900 1950 data
Fake 1901 1950 data
Fake 1902 1950 data
(...)
USE 1900 1901 data
USE 1901 1901 data
USE 1901 1901 data
Run Code Online (Sandbox Code Playgroud)
该founding_year是位在第一混乱,但什么数据集是干什么的,是其跟踪的国家are countries in 2001,每年-收集有关他们的各种统计数据。
不,我想创建一个图表来显示随着时间的推移国家的创建/建立。我已经有了yearX 轴的founding_year变量,该变量提供了我需要的信息 - 但是我在groupby操作时遇到了问题number of new nations per founding year
我使用以下命令:
df.groupby(['founding_years', 'country']).size()
Run Code Online (Sandbox Code Playgroud)
我选择了founding_year和country变量以确保我有唯一的对(因为每个国家有多行)
但是,这给了我一个错误的结果。
founding_year country
1945 Austria 46
Poland 46
1946 Jordan 46
Lebanon 46
Philippines 46
Syria 16
1947 India 46
Pakistan 25
1948 Israel 46
Myanmar 46
North Korea 46
South Korea 46
Sri Lanka 46
Run Code Online (Sandbox Code Playgroud)
相反,它返回这个国家在数据库中的行数。一个.count()命令给出了相同的结果。我尝试year在 groupby 函数的末尾添加,但这使它只返回一大堆唯一值。
我有点困惑,我需要的所有信息都在那里,但我似乎无法弄清楚如何获得它 - 你们有人知道我错过了什么吗?
对于每个创始年份的国家数量,您应该仅按年份分组。例如:
df = pd.DataFrame([['c1', 1950], ['c1', 1950], ['c1', 1950],
['c2', 1960], ['c2', 1960], ['c2', 1960],
['c3', 1970], ['c3', 1970], ['c3', 1970],
['c4', 1960], ['c4', 1960], ['c4', 1960],
['c5', 1950], ['c5', 1950], ['c5', 1950]],
columns=['country', 'year'])
res = df.groupby('year')['country'].nunique().reset_index()
print(res)
year country
0 1950 2
1 1960 2
2 1970 1
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要向原始数据帧添加计数系列,请使用pd.DataFrame.transform:
df['count'] = df.groupby('year')['country'].transform('nunique')
print(df)
country year count
0 c1 1950 2
1 c1 1950 2
2 c1 1950 2
...
6 c3 1970 1
7 c3 1970 1
8 c3 1970 1
9 c4 1960 2
...
13 c5 1950 2
14 c5 1950 2
Run Code Online (Sandbox Code Playgroud)