【问题标题】:Custom aggregate function in pandas groupbypandas groupby中的自定义聚合函数
【发布时间】:2017-08-04 09:12:36
【问题描述】:

我有一个如下的数据框

    Client          Month        Amount
     ABC           201601       -4563
     BHG           201602          321
     HTD           201601       -5234
     BTD            201603         342
     ERT.            201601        234

我想知道每个月有多少客户的金额是负数。它应该是客户总数的百分比,例如 201601 月 2 个客户的金额为负数,一个客户的金额为正数,因此比率应该是 2/3(客户总数为负数)/(该特定月份的客户总数)。

我正在使用以下代码,但它不起作用。

  df.groupby('Month')['Client'].count()

【问题讨论】:

    标签: pandas group-by aggregate-functions mean


    【解决方案1】:

    我认为你需要 mean 的布尔掩码创建 x<0:

    df = df.groupby('Month')['Amount'].apply(lambda x: 100 * (x<0).mean())
    print (df)
    Month
    201601    100.0
    201602      0.0
    201603      0.0
    Name: Amount, dtype: float64
    

    编辑:

    df = df.groupby('Month')['Amount'].apply(lambda x: 100 * (x<0).mean())
    print (df)
    Month
    201601    66.666667
    201602     0.000000
    201603     0.000000
    Name: Amount, dtype: float64
    

    df = df.groupby(['Month', 'Client'])['Amount'].apply(lambda x: 100 * (x<0).mean())
    print (df)
    Month   Client
    201601  ABC       100.0
            HTD       100.0
    201602  BHG         0.0
    201603  BTD         0.0
    Name: Amount, dtype: float64
    

    【讨论】:

    • 如果我按多列分组,上面的逻辑会改变吗?
    • 我要测试一下,等一下。
    • 我认为它适用于多列也非常好。
    • 我需要一个数量为负数的客户与该特定月份的客户总数的比例
    • 我不确定是否理解,它需要别的东西吗?您可以更改示例并添加所需的输出或解释更多吗?谢谢。
    猜你喜欢
    • 2019-06-08
    • 2023-01-12
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多