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

基于Pandas生成列c:连续1序列结束后保留最大值至更大值出现

解决方案

1. 生成列b的简洁方法

按照规则,当df.a > df.a.shift(1)时b为1,否则为0,直接用pandas内置方法实现:

df['b'] = df['a'].gt(df['a'].shift()).astype(int).fillna(1).astype(int)

说明:gt方法返回布尔值,转int后得到0/1;第一行因shift()后为NaN,用fillna(1)填充(匹配示例中第一行b=1的结果),最后转int确保类型统一。

2. 生成列c的实现逻辑

根据需求,我们需要保留连续1序列的最大值,并填充到下一个更大值出现前的所有行。可以通过以下简洁代码实现:

df['c'] = df['a'].where(df['b'] == 1).cummax().ffill()

分步解释:

  • df['a'].where(df['b'] == 1):仅保留b=1时的a值,其余位置设为NaN
  • cummax():计算累计最大值,确保每个阶段的峰值不会被后续更小值覆盖
  • ffill():向前填充NaN,将峰值填充到后续所有行,直到下一个更大峰值出现

完整可运行代码

import pandas as pd 

df = pd.DataFrame(
    {
        'a': [110, 115, 112, 180, 150, 175, 160, 145, 200, 205, 208, 203, 206, 207, 208, 209, 210, 215],
    }
)
# 生成列b
df['b'] = df['a'].gt(df['a'].shift()).astype(int).fillna(1).astype(int)
# 生成列c
df['c'] = df['a'].where(df['b'] == 1).cummax().ffill()

print(df)

运行后输出与示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:35:16