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