Python 使用列过滤器计算差异
我有一个数据框,如:Python 使用列过滤器计算差异,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,如: | country | year | people | US | 1990 | 20 | US | 1991 | 34 | .. | .. | .. | US | 2020 | 456 | UK | 1990 | 5 | UK | 1991 | 7 | .. | .. | .. | UK | 2020 | 300 我想计算每个国家2020年和1990年之间的差异,预计产出
| 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
由于感兴趣的年份是2020年和1990年,我们只对这两个年份进行筛选,按国家分组,按降序对人员列进行排序,然后使用并获得差异:
(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))
)
已编辑,键入错误。如果我要除法而不是差分,则numpy命令将是什么意思
value2020/value1990
?我应该使用什么函数来替换np.subtract.reduce
为代码添加了详细信息。我不确定您是否可以在分组中使用numpy divide