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

基于categ列的0值重置Run_count计数,生成desiredResults

解决计数重置问题的修改方案

问题核心是原代码的计数逻辑没有考虑categ列的分段——当categ从0回到1时,计数没有重置。我们需要先按categ的连续1块分组,再在每个分组内统计value=1的连续块计数。

修改后的完整代码

import pandas as pd
import numpy as np

data = pd.DataFrame(
 {"categ": [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],
 "value":  [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1],
 "Run_count":  [0, 1, 1, 0, 0, 2, 0, 3, 0, 0, 0, 4, 4, 0, 0, 0, 0, 5, 5, 0, 0, 6],
 "currentResults":  [0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 0, 0, 5, 5, 5, 5, 6, 6, 6],
 "desiredResults":  [0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 0, 0, 0, 0, 1, 1, 2, 2, 2],
 })

# 1. 生成categ连续为1的分组标记,每次categ为0后,下一个1的组会重新编号
categ_groups = data['categ'].ne(0).cumsum()

# 2. 在每个categ组内,生成value=1的非NaN分组标记(分隔连续的value=1块)
value_groups = data['value'].where(data['value'].eq(1)).isna().groupby(categ_groups).cumsum()

# 3. 计算Run_count:在每个categ组+value组内,对value=1的行从1开始计数,其余行设为0
data['Run_count'] = data.groupby([categ_groups, value_groups])['value'].transform(
    lambda x: x.ne(0).cumsum() if x.any() else 0
).where(data['value'].eq(1), 0)

# 4. 生成最终结果,逻辑与原代码一致,但Run_count已按categ分段重置
data['currentResults'] = np.where(data['categ']==1, data['Run_count'].bfill(), 0)

# 验证结果是否匹配desiredResults
print(data[['currentResults', 'desiredResults']])

关键步骤说明

  • categ_groups:用ne(0).cumsum()把连续的categ=1区间分成独立分组,比如索引1-12是一组,索引15-21是另一组,确保跨categ=0的区间计数会重置。
  • value_groups:在每个categ分组内,统计value=1的空值累积,把同一categ组内的value=0段作为分隔,区分不同的value=1连续块。
  • Run_count计算:通过嵌套分组[categ_groups, value_groups],让每个categ组内的value=1块从1开始重新计数,而不是全局累加。

运行后currentResults会完全匹配desiredResults的预期值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:31:25