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

如何用Pandas为新列填充另一列的历史最大值

问题:生成截至当前行的历史最大值列

当DataFrame某列值无序时,需新增一列填充该列截至当前行的历史最大值,使用rolling()方法尝试后结果不符合预期。

可复现示例

创建包含无序数值的DataFrame:

import pandas as pd

# 生成无序数值列表
list_of_original_values = [100, 98, 102, 107, 94, 95, 96, 92, 150]

# 创建DataFrame
df = pd.DataFrame().assign(original_values=list_of_original_values)

生成的DataFrame如下:

original_values
0100
198
2102
3107
494
595
696
792
8150

预期结果

预期新列的值为:[100, 100, 102, 107, 107, 107, 107, 107, 150],最终DataFrame如下:

list_of_expected_values = [100, 100, 102, 107, 107, 107, 107, 107, 150]
df = df.assign(expected_values=list_of_expected_values)
original_valuesexpected_values
0100100
198100
2102102
3107107
494107
595107
696107
792107
8150150

错误尝试及原因

使用rolling(2).max()的结果不符合预期:

df = df.assign(try_1_with_rolling=lambda df: df['original_values'].rolling(2).max())

结果中第5、6、7行的try_1_with_rolling值错误,原因是rolling(2)仅计算最近2行的最大值,而非从第一行到当前行的所有历史值的最大值。

正确解法

直接使用Pandas的cummax()方法,该方法会计算列的累积最大值,即截至当前行的所有历史值的最大值:

df = df.assign(historical_max=lambda df: df['original_values'].cummax())

运行后得到的historical_max列与预期结果完全一致:

original_valuesexpected_valueshistorical_max
0100100100
198100100
2102102102
3107107107
494107107
595107107
696107107
792107107
8150150150

场景适配

针对传感器接收的无序时间批次数据,通过cummax()得到历史最大时间后,可轻松检测出时间早于该最大值的批次(即当前行时间 < 历史最大时间的批次)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:01:24