【问题标题】:Groupby multiindex pandas series using agg to sum AND apply listGroupby 多索引熊猫系列使用 agg 求和并应用列表
【发布时间】:2019-03-27 12:46:23
【问题描述】:

我有两个多索引系列

系列 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 的系列。我想我可以将两个系列连接在一起,但我只是想看看是否有更好的方法。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用concataggregatesum 聚合并转换为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]
    

    【讨论】:

    • 如果是pandas系列而不是dataframe,会不会不一样?
    • @PlataleaMinor - 尝试将 pd.concat([df1, df2]) 更改为 pd.concat([df1.reset_index(), df2.reset_index()])
    【解决方案2】:

    您可以先像这样连接两个数据框:

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-25
      • 2022-09-23
      • 2014-10-11
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      相关资源
      最近更新 更多