想象一下我有以下数据框:
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方法以简单的方式实现这一目标,而不必创建另一个数据框然后进行除法。
答案 0 :(得分:2)
您可以将lambda函数与axis=1
结合使用以单行解决。
t.groupby('year')['pop','production'].agg('sum').apply(lambda x: x['production']/x['pop'], axis=1)