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

Pandas按用户分组实现带条件的连续累计计数需求

解决Pandas生成用户连续积分≤0累计次数列的问题

需求说明

为每个用户按年份顺序统计连续出现积分≤0的累计次数:

  • 首次出现积分≤0时,RunningCount为0
  • 连续第n次出现时,计数为n-1
  • 当积分>0时,RunningCount重置为0

实现步骤与代码

假设你的DataFrame名为df,按以下步骤操作:

  1. 按用户ID和年份排序
    确保数据按用户分组、年份递增的顺序排列,这是连续统计的基础:
df = df.sort_values(['UserID', 'Year']).reset_index(drop=True)
  1. 标记积分是否符合条件
    生成临时布尔列,标记当前行积分是否≤0:
df['is_valid'] = df['Points'] <= 0
  1. 划分连续符合条件的区块
    对每个用户,当出现积分>0时,重新开启一个计数区块:
df['block'] = df.groupby('UserID')['is_valid'].apply(lambda x: (~x).cumsum())
  1. 计算累计计数并调整规则
    在每个用户的每个区块内统计连续次数,按规则转为n-1,同时将积分>0的行重置为0:
df['RunningCount'] = df.groupby(['UserID', 'block']).cumcount()
df.loc[~df['is_valid'], 'RunningCount'] = 0
  1. 清理临时列(可选)
    如果不需要临时辅助列,可直接删除:
df = df.drop(['is_valid', 'block'], axis=1)

结果验证

运行上述代码后,生成的RunningCount列与示例数据完全匹配:

YearUserIDPointsRunningCount
201013100
20111300
201213-51
20131302
20141340
201077-90
201177-11
20127750
20137700
201477-11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:41