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

如何在Pandas中保留前序最大值并创建新列?

Pandas实现逐行取当前值与前一行结果的较大值

问题背景

现有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame(
    {
        'a': [1, 9, 8, 10, 7, 11, 20]
    }
)

需要创建新列b,规则为:

  • b的第0行等于df.a.iloc[0]
  • 后续每行取当前a列值与前一行b列值的较大者

期望输出如下:

a   b
0   1   1
1   9   9
2   8   9
3  10  10
4   7  10
5  11  11
6  20  20

之前尝试用df["b"] = np.fmax(df["a"], df["a"].shift(1))未解决问题,因为该代码取的是当前a值与前一行a值的最大值,而非前一行b值的最大值,不符合需求。

正确实现方法

方法1:使用cummax()(推荐,高效简洁)

你的需求本质上是计算a列的累积最大值,每一行的b值等于从第0行到当前行a列的最大值,直接用Pandas内置的cummax()方法即可实现:

import pandas as pd

df = pd.DataFrame({'a': [1, 9, 8, 10, 7, 11, 20]})
df['b'] = df['a'].cummax()

print(df)

运行后输出与期望完全一致。

方法2:手动迭代(适合理解逻辑,小数据场景)

如果需要手动模拟逐行计算的过程,可以用循环实现:

import pandas as pd

df = pd.DataFrame({'a': [1, 9, 8, 10, 7, 11, 20]})
df['b'] = df['a'].iloc[0]  # 初始化第一行

for i in range(1, len(df)):
    df['b'].iloc[i] = max(df['a'].iloc[i], df['b'].iloc[i-1])

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:14