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

Python DataFrame按时间顺序生成_cyclenumber列问题求助

问题分析

你的代码核心问题是:循环结束后才把最终的p值统一赋值给整个_cyclenumber列,导致所有单元格都是同一个最终计数。你需要在循环过程中为每一行记录当前的p值,而非最后一次性赋值。

解决方法

方法1:修正循环逻辑

初始化列表存储每一行的循环编号,循环时更新p并同步追加到列表,最后将列表绑定到新列:

p = 1
cycle_numbers = [p]  # 第一行初始编号为1
for i in range(len(df81)-1):
    if df81['_cycletime'].iloc[i] != df81['_cycletime'].iloc[i+1]:
        p += 1
    cycle_numbers.append(p)

df81['_cyclenumber'] = cycle_numbers

方法2:Pandas向量化操作(更高效)

避免手动循环,用Pandas内置函数实现,处理大数据集时性能优势明显:

# 判断当前行与前一行的_cycletime是否不同,生成布尔序列
diff_flag = df81['_cycletime'].ne(df81['_cycletime'].shift())
# 累加布尔值(True=1,False=0),再加1得到起始为1的循环编号
df81['_cyclenumber'] = diff_flag.cumsum()

示例结果

针对你提供的样本数据,两种方法都会生成如下结果:

Index_time_power_cycletime_cyclenumber
12022-07-30T11:00:28.042Z1255.43799972531
22022-07-30T11:00:28.554Z1055.43799972531
32022-07-30T11:00:29.068Z11.555.41199874882
42022-07-30T11:00:29.623Z855.41199874882

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:39:25