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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:27:16