簡體   English   中英

Pandas groupby 使用基於兩列的聚合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM