[英]Groupby multiindex pandas series using agg to sum AND apply list
我有兩個多索引系列
系列 1
Company Name Product Price TransactionID
Company A Apple 10 T0001
Company B Grapes 20 T0002
Orange 30 T0003
系列2
Company Name Product Price TransactionID
Company A Orange 10 T0004
Apple 20 T0005
Company B Orange 20 T0006
我想形成如下系列
Company Name Product Sum_price TransactionID
Company A Orange 10 [T0004]
Apple 30 [T0001,T0005]
Company B Orange 50 [T0003,T0006]
Grapes 20 [T0002]
從組數據框中獲取總和和計數? 表明我可以使用 .agg 來同時計算 sum 和 count,但是如何同時應用 .apply(list) 和 sum 呢? 現在,我已經應用了代碼Pandas:添加包含列表的多索引系列/數據幀以形成兩個系列,一個是 sum,另一個是帶有 transactionID 的系列。 我想我可以將兩個系列連接在一起,但我只是想看看是否有更好的方法來做到這一點。
您可以先像這樣連接兩個數據幀:
df3 = pd.concat([df1, df2])
在此之后,您可以使用 groupby agg 進行求和,也可以使用 lambda 函數來連接列表
df3 = df3.groupby(['Company', 'Name', 'Product']).agg({'Price':sum, 'TransactionID': lambda x: [i for i in x]})
然后,您將獲得所需的輸出,如下所示:
Company Name Product Sum_price TransactionID
Company A Orange 10 [T0004]
Apple 30 [T0001,T0005]
Company B Orange 50 [T0003,T0006]
Grapes 20 [T0002]
使用concat
with aggregate by aggregate
with sum
並轉換為list
:
df = (pd.concat([df1, df2])
.groupby(['Company Name', 'Product'], as_index=False)
.agg({'Price':'sum', 'TransactionID': lambda x: x.tolist()})
)
print (df)
Company Name Product Price TransactionID
0 Company A Apple 30 [T0001, T0005]
1 Company A Orange 10 [T0004]
2 Company B Grapes 20 [T0002]
3 Company B Orange 50 [T0003, T0006]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.