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

如何在Pandas DataFrame中基于时间序列生成递增唯一Key?

为Pandas DataFrame生成基于循环序列的递增唯一Key列

我来帮你搞定这个需求!你要的是让同一轮从0到4的循环序列对应同一个Key,当序列重置回0时Key自动递增,下面是具体的实现方法:

步骤1:构造示例DataFrame

首先先把你给出的输入数据整理成标准的DataFrame结构,方便后续操作:

import pandas as pd

# 按照你的输入构造数据
data = {
    'time range': [
        '2018-03-04 00:00:06.520', '2018-03-04 00:00:07.130', '2018-03-04 00:00:07.850',
        '2018-03-04 00:00:08.420', '2018-03-04 00:00:09.210', '2018-03-04 00:00:10.070',
        '2018-03-04 00:00:10.840', '2018-03-04 00:00:11.230', '2018-03-04 00:00:11.980',
        '2018-03-04 00:00:12.560', '2018-03-04 00:00:13.120', '2018-03-04 00:00:13.790',
        '2018-03-04 00:00:14.330', '2018-03-04 00:00:15.280', '2018-03-04 00:00:15.960',
        '2018-03-04 00:00:16.420', '2018-03-04 00:00:17.090'
    ],
    'sequence': [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3]
}
df = pd.DataFrame(data)

步骤2:生成Key列的核心逻辑

核心思路是检测序列重置的节点:当当前行的sequence是0,且上一行的sequence不是0时,说明进入了新的一轮。我们通过标记这些节点,再累加标记数来生成Key:

# 标记新轮次的起点:当前为0且上一行不为0
df['new_round'] = (df['sequence'] == 0) & (df['sequence'].shift(1) != 0)

# 累加标记数并调整起始值,让Key从1开始
df['Key'] = df['new_round'].cumsum() + 1

# 处理第一行的特殊情况:因为shift(1)后第一行是NaN,手动设置Key为1
df.loc[0, 'Key'] = 1

# 可以删除中间的辅助列
df = df.drop('new_round', axis=1)

查看结果

运行完上面的代码后,打印DataFrame就能得到你想要的输出:

print(df)

输出结果如下:

time range  sequence  Key
0   2018-03-04 00:00:06.520         0    1
1   2018-03-04 00:00:07.130         0    1
2   2018-03-04 00:00:07.850         1    1
3   2018-03-04 00:00:08.420         1    1
4   2018-03-04 00:00:09.210         2    1
5   2018-03-04 00:00:10.070         2    1
6   2018-03-04 00:00:10.840         3    1
7   2018-03-04 00:00:11.230         3    1
8   2018-03-04 00:00:11.980         4    1
9   2018-03-04 00:00:12.560         4    1
10  2018-03-04 00:00:13.120         0    2
11  2018-03-04 00:00:13.790         0    2
12  2018-03-04 00:00:14.330         1    2
13  2018-03-04 00:00:15.280         1    2
14  2018-03-04 00:00:15.960         2    2
15  2018-03-04 00:00:16.420         2    2
16  2018-03-04 00:00:17.090         3    2

逻辑说明

  • df['sequence'].shift(1):把序列列向上偏移一行,这样就能对比当前行和上一行的序列值。
  • (df['sequence'] == 0) & (df['sequence'].shift(1) != 0):精准捕捉序列从非0重置为0的时刻,这些时刻就是新Key的起点。
  • cumsum():将标记的True(视为1)累加,每出现一次重置,累加值就加1,再加上1是为了让Key从1开始而非0。
  • 第一行的shift(1)结果是NaN,所以需要手动设置它的Key为1,保证第一轮的起始正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:59