熊猫使用列过滤器计算差异

时间:2020-02-25 21:44:50

标签: 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 | difference 
|US      | 436
|UK      | 295

1 个答案:

答案 0 :(得分:1)

由于感兴趣的年份是2020年和1990年,所以我们仅对这些年份进行过滤,按国家/地区对降序排列的人员列,并使用numpy subtractnumpy 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))
 )