【问题标题】:pandas groupby aggregate to find number of days customer made at least 1 transaction熊猫 groupby 聚合以查找客户至少进行 1 笔交易的天数
【发布时间】:2022-01-06 09:32:18
【问题描述】:

我有这样的客户交易数据集:

ID Date Amount
1 1-1-21 5
2 2-1-21 8
1 2-1-21 6
1 3-1-21 5
2 3-1-21 9
2 3-1-21 10

我必须像这样对客户级别的数据进行分组和聚合:

ID Total Amount Number of days active
1 16 3
2 27 2

Total Amount = 所有Amount 列的总和

Number of days active = 客户进行 1 次或多次交易的天数

如何计算我的列Number of days active?到目前为止,我已经尝试过:

df= df.groupby('ID').agg({'Amount': lambda price: price.sum(),
                          'Date': lambda date: len(date).days})

我的Total Amount 栏很好,但我找不到Number of days active

【问题讨论】:

    标签: python pandas dataframe pandas-groupby aggregate


    【解决方案1】:

    让我们用agggroupbynunique + sum

    out = df.groupby('ID').agg(Numberofdaysactive = ('Date','nunique'),TotalAmount = ('Amount','sum')).reset_index()
    out
    Out[384]: 
       ID  Numberofdaysactive  TotalAmount
    0   1                   3           16
    1   2                   2           27
    

    【讨论】:

      【解决方案2】:

      nunique 应该是你需要的。也就是说,聚合df可以通过以下方式计算:

      df_agg = df.groupby('ID').agg({"Amount":sum, "Date":pd.Series.nunique})
      

      注意如何将函数句柄直接传递给agg

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-28
        • 2022-11-02
        • 1970-01-01
        • 2023-02-25
        • 1970-01-01
        • 2021-03-21
        • 2020-08-30
        • 1970-01-01
        相关资源
        最近更新 更多