如何在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
相关产品推荐
相关产品推荐

