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

基于Pandas按列值变化规则生成ID列的实现问题

解决Pandas中按数据变化规则生成ID列的问题

需求说明

  • 现有A列连续采样数据:列值变化时为传感器有效采集,列值重复时为无效采集
  • ID生成规则:
    1. 列值连续变化时,ID保持一致
    2. 列值开始重复时,ID递增1
    3. 再次出现列值变化时,ID再次递增,以此类推

原代码问题分析

你当前的代码逻辑存在两处错误:

  • 遇到列值重复时,每次循环都递增id_value,导致每个重复行的ID独立,无法实现同一重复块共用一个ID
  • 列值再次变化时,仅继承前一行ID,未触发ID递增,不符合规则3

正确实现方案

我们需要先识别状态切换节点(从"变化"到"重复",或从"重复"到"变化"的位置),再通过累加切换次数生成ID:

import pandas as pd

data = [3.5, 3.6, 3.7, 3.8, 1, 1, 1, 1, 1, 3.9, 4.0, 4.2, 4.4, 4.6, 4.8, 3,        
3, 3,  3, 3.2, 3.3, 3.5, 2.1, 2.1, 2.1, 2.1]

df = pd.DataFrame({'A': data})

# 1. 判断每行与前一行是否不同(标记是否处于"变化"状态)
is_changing = df['A'] != df['A'].shift(1)
# 2. 标记状态切换的节点:当前状态与前一行状态不一致的位置
switch_point = is_changing.ne(is_changing.shift())
# 3. 修正前两个节点:前两行均为"变化"状态,无切换,设为False
switch_point.iloc[:2] = False
# 4. 累加切换次数生成ID,初始ID为0
df['ID'] = switch_point.cumsum()

# 查看结果
print(df)

输出验证

运行后输出符合预期:

A  ID
0   3.5   0
1   3.6   0
2   3.7   0
3   3.8   0
4   1.0   1
5   1.0   1
6   1.0   1
7   1.0   1
8   1.0   1
9   3.9   2
10  4.0   2
11  4.2   2
12  4.4   2
13  4.6   2
14  4.8   2
15  3.0   3
16  3.0   3
17  3.0   3
18  3.0   3
19  3.2   4
20  3.3   4
21  3.5   4
22  2.1   5
23  2.1   5
24  2.1   5
25  2.1   5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:42:51