pandas groupby中的自定义聚合函数
Posted
技术标签:
【中文标题】pandas groupby中的自定义聚合函数【英文标题】:Custom aggregate function in pandas 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()
【问题讨论】:
【参考方案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
【讨论】:
如果我按多列分组,上面的逻辑会改变吗? 我要测试一下,等一下。 我认为它适用于多列也非常好。 我需要一个数量为负数的客户与该特定月份的客户总数的比例 我不确定是否理解,它需要别的东西吗?您可以更改示例并添加所需的输出或解释更多吗?谢谢。以上是关于pandas groupby中的自定义聚合函数的主要内容,如果未能解决你的问题,请参考以下文章