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

在Pandas中用.shift和.apply求行最大值:避免临时列及多列移位解法

无临时列计算含移位列的行最大值

原始DataFrame

我们有如下DataFrame:

import pandas as pd
df = pd.DataFrame({'A': [2.001, 4.001, 8.001, 0.001],
                   'B': [2.001, 0.001, 0.001, 0.001],
                   'C': [11.001, 12.001, 11.001, 8.001],
                   'D': [12.001, 23.001, 12.001, 8.021],
                   'E': [11.001, 24.001, 18.001, 8.0031]})

初始解法的局限

要计算每行中A、B、E列及E列下移一位(shift(-1))后的最大值,最初的写法是:

df["e_shifted"] =  df["E"].shift(-1)
df.apply(lambda x: max(x['A'], x['B'], x['E'], x['e_shifted']),axis = 1) 

但这种方法会在DataFrame中创建临时列e_shifted,不够简洁。

如果尝试直接在apply里调用shift(-1):

df.apply(lambda x: max(x['A'], x['B'], x['E'], x['E'].shift(-1)),axis = 1) 

会触发错误:

AttributeError: 'numpy.float64' object has no attribute 'shift'

原因是apply逐行处理时,x['E']是单个数值而非Series,无法调用shift方法。

单列移位的优化方案

@Corralien提供了无需保留临时列的解决方案,通过assign临时生成移位列后直接计算最大值:

out = df.assign(E_shift=df['E'].shift(-1))[['A', 'B', 'E', 'E_shift']].max(axis=1)

多列移位的问题与修正

如果要处理多列移位(比如同时移位E和A列),最初的尝试代码:

out = df.assign(E_shift=df['E'].shift(-1), A_shift=df['A'].shift(-1))[['A', 'B', 'E', 'E_shift', 'A_Shift']].max(axis=1)

会触发KeyError:

KeyError: "['A_Shift'] not in index"

这是因为列名拼写错误——assign里定义的是A_shift,但索引列表里写成了A_Shift(大小写不一致)。修正拼写后的正确代码为:

out = df.assign(E_shift=df['E'].shift(-1), A_shift=df['A'].shift(-1))[['A', 'B', 'E', 'E_shift', 'A_shift']].max(axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:26:18