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 |
|---|---|---|---|---|
| 1 | 2022-07-30T11:00:28.042Z | 12 | 55.4379997253 | 1 |
| 2 | 2022-07-30T11:00:28.554Z | 10 | 55.4379997253 | 1 |
| 3 | 2022-07-30T11:00:29.068Z | 11.5 | 55.4119987488 | 2 |
| 4 | 2022-07-30T11:00:29.623Z | 8 | 55.4119987488 | 2 |
内容的提问来源于stack exchange,提问作者PP1
相关产品推荐
相关产品推荐

