尝试与 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
我有一个 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