如何基于移位列与另一列生成最大值列?现有解法是否最优?
问题:创建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
相关产品推荐
相关产品推荐

