尝试与 pandas 数据框中的值进行比较以获得最大值

Trying to compare to values in a pandas dataframe for max value

我有一个 pandas 数据框,我正在尝试在数据框中填充一个新列,它迭代地采用位于数据框另一列中的两个值的最大值。我正在尝试构建一个循环来执行此操作,并节省计算时间,因为我意识到我可能可以使用更多代码行来完成此操作。

for x in ((jac_input.index)):
    jac_output['Max Load'][x] = jac_input[['load'][x],['load'][x+1]].max()

但是,我在比较过程中一直收到这个错误

IndexError: list index out of range

关于我哪里出错的任何想法?如有任何帮助,我们将不胜感激!

您当前的代码有很多问题。

当您执行 ['abc'][x] 时,x 只能取值 0,这将 return 'abc' 因为您正在切片 一个列表。完全不是您期望的那样(我想,切片系列)。

要使您的代码有效,您应该执行以下操作:

jac_input = pd.DataFrame({'load': [1,0,3,2,5,4]})
for x in jac_input.index:
    print(jac_input['load'].loc[x:x+1].max())

输出:

1
3
3
5
5
4

此外,在分配时,如果您使用 jac_output['Max Load'][x] = ...,您可能会遇到 SettingWithCopyWarning。你应该使用 loc: jac_outputLoc[x, 'Max Load'] = .

但您不需要所有这些,请改用矢量代码!

您可以对反向数据帧执行rolling

jac_output['Max Load'] = jac_input['load'][::-1].rolling(2, min_periods=1).max()[::-1]

或使用concat:

jac_output['Max Load'] = pd.concat([jac_input['load'], jac_input['load'].shift(-1)], axis=1).max(1)

输出(无赋值):

0    1.0
1    3.0
2    3.0
3    5.0
4    5.0
5    4.0
dtype: float64