Pandas如何基于用户ID与登录状态生成分组递增序列列
问题根因
你原代码的逻辑存在两个核心错误:
- 没有提前按
user_id做分组隔离,不同用户之间的状态变更会被误判为有效变化 - 使用
cumcount()会在每个分组内逐行计数,导致同一登录状态下的不同行序列值持续累加,不符合同状态序列值不变的需求
正确实现代码
# 按user_id分组后,在单用户维度判断登录状态变化并做累积求和 df1['sequence'] = df1.groupby('user_id')['login_status'].apply( lambda x: (x != x.shift()).cumsum() )
实现逻辑说明
- 首先按
user_id分组,确保不同用户的登录状态变更不会互相影响 - 每个用户组内,通过
x != x.shift()判断当前行登录状态是否和上一行有差异,差异返回布尔值True(对应数值1),无差异返回False(对应数值0) - 对布尔结果做累积求和:每次状态变化时累加值+1,同状态下累加值保持不变,最终结果正好匹配你需要的sequence规则
测试上述代码后,输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者spt hsb
相关产品推荐
相关产品推荐

