Pandas实现DataFrame列计数:每遇第4次值变化计数器递增1
实现方案
采用Pandas原生向量化操作实现,无逐行循环逻辑,性能适配大规模数据集,核心逻辑是先识别连续相同值的分段,再按计数周期批量计算计数器值。
import pandas as pd df = pd.DataFrame({"step": [1,1,1,2,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,9,7,7, 7,8,8,8,9,9,7,7,8,8,8,9,9,9,7,7]}) # 标记step值和上一行不同的变化点 is_change = df['step'].ne(df['step'].shift()) # 为每个连续相同值的段分配从0开始的唯一编号 block_id = is_change.cumsum() - 1 # 每3个连续段(对应累计出现4个不同step值)为一个周期,计算计数器值 df['counter'] = block_id // 3
结果验证
执行后输出的counter列完全匹配预期:
0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 2 21 2 22 2 23 2 24 2 25 2 26 2 27 2 28 2 29 2 30 2 31 2 32 2 33 3 34 3 35 3 36 3 37 3 38 3 39 3 40 3 41 4 42 4 43 4 44 4 45 4 46 4 47 4 48 4 49 5 50 5 Name: counter, dtype: int64
逻辑说明
- 全流程使用Pandas内置向量化运算,性能比逐行
if判断、apply函数高2~3个数量级,可直接处理千万级规模数据集 - 计数逻辑和
step列的具体取值无关,仅依赖值的连续变化边界,适配任意数值、字符串类型的step列 - 计数规则可灵活调整:如果需要修改触发递增的不同值数量,只需调整整除的分母即可,例如累计出现N个不同值时计数器加1,分母设置为
N-1
内容的提问来源于stack exchange,提问作者Murray Ross
相关产品推荐
相关产品推荐

