【问题标题】:pandas compute difference using to column filters熊猫使用列过滤器计算差异
【发布时间】:2020-02-26 06:20:15
【问题描述】:

我有一个 pandas 数据框,例如:

| 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

【问题讨论】:

  • 已编辑,输入错误。

标签: python pandas dataframe


【解决方案1】:

由于感兴趣的年份是 2020 年和 1990 年,我们仅筛选那些年份,按国家/地区降序对人员列进行排序,并使用 numpy subtractnumpy reduce 来获得差异:

(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))
 )

【讨论】:

  • 如果我想划分而不是差异意味着value2020/value1990,numpy 命令是什么?我应该用什么函数来替换np.subtract.reduce
  • 为代码添加了细节。我不确定您是否可以在分组中使用 numpy divide
猜你喜欢
  • 2021-01-05
  • 2021-08-19
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2016-11-13
  • 2019-11-03
  • 2015-03-26
相关资源
最近更新 更多