我有一个熊猫数据框,如:
| country | year | people
| US | 1990 | 20
| US | 1991 | 34
| .. | .. | ..
| US | 2020 | 456
| UK | 1990 | 5
| UK | 1991 | 7
| .. | .. | ..
| UK | 2020 | 300
我想计算每个国家在2020年和1990年之间的差异,预期产出:
|country | difference
|US | 436
|UK | 295
答案 0 :(得分:1)
由于感兴趣的年份是2020年和1990年,所以我们仅对这些年份进行过滤,按国家/地区对降序排列的人员列,并使用numpy subtract和numpy reduce得到差值:< / p>
(df.query('year==[2020,1990]')
.sort_values('people',ascending=False)
.groupby('country',sort=False)
.agg(difference=('people',np.subtract.reduce))
)
difference
country
US 436
UK 295
请注意,groupby不会进行排序-确保排序后的值不会被篡改(我们需要每列的顶部都具有最高的值,以便聚合中的减法和归约法将产生正值)>
对于部门:
(df.query('year==[2020,1990]')
.sort_values('people',ascending=False)
.groupby('country',sort=False)
.agg(fst=('people','first'), lst=('people','last'))
.assign(division=lambda x: x.fst.div(x.lst))
)