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

如何为带周期标记的DataFrame生成每行所属周期的高低值列?

为Pandas DataFrame按周期生成高低值列的实现方法

问题背景

现有一个包含波动数值列x和周期标记列cycle的Pandas DataFrame:

  • 周期以x的最低点(cycle列标记为0)起始
  • x上升至最高点(cycle列标记为1)后回落至最低点,新周期随即开始

示例数据如下:

import pandas as pd
import numpy as np

x = [1,2,3,4,5,4,3, # cycle 1
     2,3,4,5,4,3,2, # cycle 2
     1,2,3,4,5,6,5, # cycle 3
     4] # cycle 4
points = [0, np.nan, np.nan, np.nan, 1, np.nan, np.nan, # cycle 1
          0, np.nan, np.nan, 1, np.nan, np.nan, np.nan, # cycle 2
          0, np.nan, np.nan, np.nan, np.nan, 1, np.nan, # cycle 3
          0] # cycle 4
df = pd.DataFrame({'x':x, 'cycle':points})

需新增low和high两列,分别标记每行所属周期的高低值:

  • 每次cycle列出现0时周期重置
  • 仅含单个数据点的周期,高低值相等

期望结果示例:

low = [1,1,1,1,1,1,1, # cycle 1
       2,2,2,2,2,2,2, # cycle 2
       1,1,1,1,1,1,1, # cycle 3
       4] # cycle 4
high = [5,5,5,5,5,5,5, # cycle 1
        5,5,5,5,5,5,5, # cycle 2
        6,6,6,6,6,6,6,  # cycle 3
        4] # cycle 4
new_df = pd.DataFrame({'x':x, 'cycle':points, 'low':low, 'high':high})

解决方案

核心思路是通过cycle列的0值划分周期分组,再对每个分组计算x的最小/最大值,最后映射回原DataFrame。

实现代码

import pandas as pd
import numpy as np

# 示例数据(可替换为实际数据集)
x = [1,2,3,4,5,4,3, # cycle 1
     2,3,4,5,4,3,2, # cycle 2
     1,2,3,4,5,6,5, # cycle 3
     4] # cycle 4
points = [0, np.nan, np.nan, np.nan, 1, np.nan, np.nan, # cycle 1
          0, np.nan, np.nan, 1, np.nan, np.nan, np.nan, # cycle 2
          0, np.nan, np.nan, np.nan, np.nan, 1, np.nan, # cycle 3
          0] # cycle 4
df = pd.DataFrame({'x':x, 'cycle':points})

# 1. 生成周期分组编号:每次cycle为0时开启新分组
df['group'] = df['cycle'].eq(0).cumsum()

# 2. 计算每个分组的x最小值(low)和最大值(high)
group_stats = df.groupby('group')['x'].agg(['min', 'max']).rename(columns={'min': 'low', 'max': 'high'})

# 3. 将统计结果合并回原DataFrame,删除临时分组列
df = df.merge(group_stats, on='group', how='left').drop(columns='group')

# 输出结果验证
print(df)

代码解释

  • 生成分组:df['cycle'].eq(0).cumsum()会对cycle等于0的位置标记为True,累加后得到连续的分组编号,每个编号对应一个完整周期。
  • 计算分组统计值:通过groupby对每个分组计算x的最小和最大值,分别对应周期的低点和高点。
  • 合并结果:使用merge将分组统计的高低值关联到原数据的每一行,自动处理单个数据点的周期(此时min和max相等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:35:27