pandas - pandas groupby 中的自定义聚合函数

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

最佳答案

我认为你需要mean创建的 bool 掩码 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

关于pandas - pandas groupby 中的自定义聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42779127/

相关文章:

python - 使用拆分填充 Pandas 数据框中的列

python - Pandas 内存

python - 针对在单个列中发现的离群值删除数据集的整行

mysql - 自定义排序依据+分组依据

sql - 在 string_agg 函数中使用 if 语句 - postgreSQL

python - 操作系统错误 : Initializing from file failed on csv in Pandas

C# - 如何从列表中查找最频繁的日期

mysql - 如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?

mysql - 如何按(多个值)中的位置对 GROUP_CONCAT 列进行排序?

mysql - 在名称字段上进行 GROUP BY,选择 ID 最小的行