繁体   English   中英

Groupby 多索引熊猫系列使用 agg 求和和应用列表

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM