我有两个多索引系列
系列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]
来自Group dataframe and get sum AND count?的内容表明,我可以同时使用.agg进行求和和计数,但是如何将.apply(list)应用于求和?现在,我已将代码Pandas: adding multiindex Series/Dataframes containing lists应用到两个序列中,一个序列是sum,另一个序列是具有transactionID的序列。我想我可以将两个系列合并在一起,但是我只想看看是否有更好的方法可以做到这一点。
答案 0 :(得分:1)
您可以先合并两个数据框,如下所示:
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]
答案 1 :(得分:1)
将concat
与aggregate
和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]