Pandas groupby分组后如何新增withdraw_#列统计提现次数
实现方法
不需要把分组结果单独转成统计表再合并回原表,用pandas的transform方法可以直接把分组统计结果对齐到原表行,一步生成目标列。
- 原始DataFrame参考样式:

- 目标处理后DataFrame参考样式:

核心实现代码
不管你之前有没有单独赋值分组对象,直接执行下面的代码即可新增withdraw_#列:
import pandas as pd # 假设你的原始DataFrame变量名为df df['withdraw_#'] = df.groupby('parent_user_id')['parent_user_id'].transform('count')
如果你已经提前把分组对象存为变量了,直接复用即可,不需要重复执行分组:
# 你之前已经执行的分组代码 grouped = df.groupby('parent_user_id') # 直接用分组对象生成新列 df['withdraw_#'] = grouped['parent_user_id'].transform('count')
特殊场景处理
如果你的数据里存在无效提现记录(比如提现金额为0、状态为失败的记录),需要先过滤有效数据再统计,避免计数不准:
# 示例:过滤掉提现金额<=0、提现状态不是成功的无效记录 valid_data = df[(df['withdraw_amount'] > 0) & (df['withdraw_status'] == 'success')] # 基于有效数据统计次数 df['withdraw_#'] = valid_data.groupby('parent_user_id')['parent_user_id'].transform('count') # 没有有效提现记录的用户对应值为NaN,可填充为0并转成整数类型 df['withdraw_#'] = df['withdraw_#'].fillna(0).astype(int)
说明:
transform方法会保持原DataFrame的索引顺序返回统计值,不会像普通groupby.count()那样把结果压缩为每组1行,所以可以直接赋值为原表的新列,不需要做额外的merge拼接操作。
内容的提问来源于stack exchange,提问作者jack mark
相关产品推荐
相关产品推荐

