python - 获取熊猫数据框中的组大小
问题描述
我有一个按年份列出的国家/地区列表,就像这样
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
每年跟踪国家 - 收集关于它们的各种统计数据。
不,我想创建一个图表来显示随着时间的推移国家的创建/建立。我已经有了year
X 轴的变量,并且该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()
命令给出相同的结果。我尝试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
或者,如果您需要向原始数据框添加计数系列,请使用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
推荐阅读
- c# - JsonSerializer.Deserialize 多次使用
- javascript - 根据 JSON Array 重新排列 HTML 表格数据
- javascript - 在 ^UNSAFE_ 方法的情况下如何忽略 eslint?
- msbuild - 如何在 Visual Studio 中找到包含文件的路径链?
- javascript - Node.JS 和 express
- asp.net-core - 如何在我的 Web 应用程序中添加推送通知?
- python - Flask + React GET 请求失败但 POST 请求成功
- python - Python比较两个不同的CSV文件,其值不在同一行中
- strapi - graphql中嵌套字段的“位置”问题
- mysql - Mysql中的数据透视表?