熊猫groupby使用基于两列的聚合

时间:2020-04-23 13:31:25

标签: python pandas dataframe pandas-groupby

想象一下我有以下数据框:

np.random.seed(42)
t = pd.DataFrame({'year': 4*['2018']+3*['2019']+4*['2016'], 
                  'pop': np.random.randint(10, 100, size=(11)),
                 'production': np.random.randint(2000, 40000, size=(11))})

print(t)
year  pop  production
 2018   61        3685
 2018   24        2769
 2018   81        4433
 2018   70        7311
 2019   30       39819
 2019   92       19568
 2019   96       21769
 2016   84       30693
 2016   84        8396
 2016   97       29480
 2016   33       27658

我想找到每年的生产总和除以流行音乐总和,我的最终数据框架将是这样的:

tmp = t.groupby('year').sum()

tmp['production']/tmp['pop']

year
2016    322.909396
2018     77.110169
2019    372.275229

我在考虑是否可以使用groupby year,然后使用基于两列的agg来完成,例如:

#doesn't work
t.groupby('year').agg(prod_per_pop = (['pop', 'production'], 
                         lambda x: x['production'].sum()/x['pop'].sum()))

我的问题基本上是,是否有可能使用任何pandas groupby方法以简单的方式实现这一目标,而不必创建另一个数据框然后进行除法。

1 个答案:

答案 0 :(得分:2)

您可以将lambda函数与axis=1结合使用以单行解决。

t.groupby('year')['pop','production'].agg('sum').apply(lambda x: x['production']/x['pop'], axis=1)