![](/img/trans.png)
[英]Use groupby and aggregate with pandas dataframe on columns *and* index
[英]Pandas groupby use aggregate based on two columns
想象一下,我有以下 dataframe:
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
我想找到每年的生產總和除以流行總和,我的最終 dataframe 將類似於:
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 方法以簡單的方式實現這一目標,而不必創建另一個 dataframe 然后必須划分。
您可以使用帶有axis=1
的lambda函數在單行中解決它。
t.groupby('year')['pop','production'].agg('sum').apply(lambda x: x['production']/x['pop'], axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.