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

如何基于移位列与另一列生成最大值列?现有解法是否最优?

问题:创建DataFrame列c的最优简洁实现

原始数据与需求

初始DataFrame代码

import pandas as pd
df = pd.DataFrame(
    {
       'a': [20, 9, 31, 40],
       'b': [1, 10, 17, 30],
    }
)

预期输出

a   b   c
0  20   1  20
1   9  10  20
2  31  17  17
3  40  30  31

生成规则

c是df.b与df.a.shift(1).bfill()两者的最大值。

你的尝试代码

df['temp'] = df.a.shift(1).bfill()
df['c'] = df[['temp', 'b']].max(axis=1)

优化方案

你的写法完全可行,但可以更简洁——不需要创建临时列temp,直接对两个Series做元素级最大值计算即可:

最简洁高效的实现

import numpy as np
df['c'] = np.maximum(df['b'], df['a'].shift(1).bfill())

纯pandas实现(无需numpy)

如果不想引入numpy,也可以直接构造临时列组合后取最大值:

df['c'] = pd.concat([df['b'], df['a'].shift(1).bfill()], axis=1).max(axis=1)

对比来看,用numpy.maximum的方式最优:它直接对两个Series进行元素级运算,既不用创建额外的DataFrame列,代码也最紧凑,运行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:12:44