我有按年份列出的国家/地区列表,如此
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
founding_year
起初有点令人困惑,但数据集正在做的是跟踪每年are countries in 2001
收集各种统计数据的国家/地区。
不,我想创建一个图表来显示各国的创建/建立。我已经为X轴提供了year
变量,而founding_year
变量提供了我需要的信息 - 但我在使用groupby
操作时无法获取number of new nations per founding year
我使用以下命令:
df.groupby(['founding_years', 'country']).size()
我选择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
它返回此国家/地区在数据库中的行数。 .count()
命令给出相同的结果。
我尝试在groupby函数的末尾添加year
,但这使得它只返回一大堆唯一值。
我有点困惑,我需要的所有信息都在那里,但我似乎无法弄清楚如何得到它 - 你们中的任何人都知道我错过了什么吗?
答案 0 :(得分:4)
对于每个创始年份的国家数量,您应该只按年份分组。例如:
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
或者,如果您需要在原始数据框中添加计数系列,请使用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