如何在Pandas DataFrame中为4年周期生成循环日序号?
实现按CyclePhase重置的递增计数列(Day)
针对你的需求,用Pandas的矢量化操作是最优方案,避免循环带来的性能损耗,步骤如下:
核心思路
先识别出CyclePhase从3变为0的重置触发点,基于这些点将数据划分成不同的周期组,最后在每个组内生成从1开始的递增计数。
代码实现
import pandas as pd # 假设你的时间序列DataFrame名为df # 1. 标记重置触发点:当前行CyclePhase为0且前一行是3 reset_points = (df['CyclePhase'] == 0) & (df['CyclePhase'].shift(1) == 3) # 2. 生成周期组ID:每次触发重置时组ID递增 cycle_groups = reset_points.cumsum() # 3. 每个周期组内生成从1开始的计数 df['Day'] = df.groupby(cycle_groups).cumcount() + 1
代码说明
reset_points:通过shift(1)获取前一行的CyclePhase值,精准定位需要重置计数的分界点。cycle_groups:对重置标记做累加,让每个完整的周期拥有唯一的组ID。cumcount() + 1:cumcount()会在每个组内从0开始计数,加1后得到从1起始的Day列。
该方法全程用Pandas内置的矢量化运算处理,性能远高于循环遍历,非常适合大规模时间序列数据。
内容的提问来源于stack exchange,提问作者Markus W
相关产品推荐
相关产品推荐

