Представьте, что у меня есть следующий фрейм данных:
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
Я думал, можно ли это сделать, используя групповой год, а затем использовать agg, основанный на двух столбцах, что-то вроде:
#doesn't work
t.groupby('year').agg(prod_per_pop = (['pop', 'production'],
lambda x: x['production'].sum()/x['pop'].sum()))
Мой вопрос в принципе, возможно ли использовать какой-либо pandas Групповой метод для достижения этого простым способом, вместо того, чтобы создавать другой фрейм данных и затем делить его.