You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何筛选过去3个月充值次数超2次的充值号码对应全部行?

Pandas数据筛选需求解答

原有代码问题说明

你给出的实现代码无法得到正确结果,核心问题如下:

  • 分组逻辑错误:你将year、month_n都加入了分组键,统计出的recharge_count是单月单账号单充值号码的充值次数,不是过去3个月的累计充值次数,和需求匹配不上
  • 字段名不匹配:分组时使用的字段是month,但数据集的月份字段为month_n,运行时会直接报字段不存在的错误
  • 结果不符合要求:分组聚合操作会改变原数据结构,你后续的筛选只能得到聚合后的统计行,无法保留原数据的所有关联行

最优实现方案

实现逻辑很清晰,分两步操作即可:

  1. 先筛选出2021年4-6月的所有数据
  2. 统计该时间范围内每个充值号码的累计充值次数,保留次数超过2次的号码对应的所有行

代码如下:

# 第一步:筛选目标时间范围的数据
mask_time_range = (df['year'] == 2021) & (df['month_n'].between(4, 6))
df_target_period = df[mask_time_range]

# 第二步:统计每个充值号的累计次数,过滤出次数>2的对应所有行
df_result = df_target_period[df_target_period.groupby('recharge_number')['recharge_number'].transform('count') > 2]

运行上述代码得到的df_result就和你给出的期望输出完全一致。

该方案的优势:

  • 逻辑直观,没有多余的中间转换操作,执行效率高
  • 完全保留原数据的字段和行结构,不会丢失原始信息
  • 代码简洁易维护,后续如果要调整时间范围、次数阈值只需要修改对应参数即可

如果后续需要支持跨年的时间范围统计,只需要将year和month_n合并为datetime类型的时间字段再做筛选即可,当前场景无需额外处理。

内容的提问来源于stack exchange,提问作者asif abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:57:00