pandas groupby中的自定义聚合函数

时间:2017-03-14 06:29:01

标签: pandas group-by aggregate-functions mean

我有一个如下的数据框

    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()

1 个答案:

答案 0 :(得分:2)

我认为你需要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