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

如何更简洁实现:DataFrame列值小于前值时替换为前值?

问题描述

给定如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame(
    {
        'a': [101, 90, 11, 120, 1]
    }
)

需要生成新列y,最终输出如下:

a    y
0  101    101.0
1   90    101.0
2   11    90.0
3  120    120.0
4    1    120.0

核心逻辑为:将列a中的每个值与其前一行的值比较,保留较大的那个。当前的实现方式如下:

df['x'] = df.a.shift(1)
df['y'] = df[['a', 'x']].max(axis=1)

询问是否存在更简洁或基于内置方法的实现方式。

解决方案

有两种更简洁的实现方式,无需创建中间列:

  • 使用Pandas Series.combine() 方法,直接对原列和移位后的列做元素级最大值比较:
df['y'] = df['a'].combine(df['a'].shift(1), max)
  • 借助Numpy的maximum()函数,实现同样的元素级最大值逻辑:
import numpy as np
df['y'] = np.maximum(df['a'], df['a'].shift(1))

这两种方法都能直接得到目标列y,代码更紧凑,且属于Pandas/Numpy的原生内置方法,执行效率也更优。

内容的提问来源于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 04:46:02