具有更新值的python for循环

具有更新值的python for循环,python,numpy,pandas,Python,Numpy,Pandas,我有一个超过10k行的熊猫数据帧。我需要遍历每一行,并根据更新后的前一行的值进行计算。For循环非常慢 示例DF: a b c 1 2 3 2 3 4 3 4 5 例如: for i in range(1,len(DF)): DF['b'] = DF['b'].[i-1]+DF['c'] 我也试过了 DF['b'] = DF['b'].shift(1)+DF['c'] 但这不会使用更新后的值“b” 进行此类计算的最佳方法是什么 答复: loc和iloc有帮助。 最好的方

我有一个超过10k行的熊猫数据帧。我需要遍历每一行,并根据更新后的前一行的值进行计算。For循环非常慢

示例DF:

a  b  c
1  2  3
2  3  4
3  4  5
例如:

for i in range(1,len(DF)):
  DF['b'] = DF['b'].[i-1]+DF['c']
我也试过了

DF['b'] = DF['b'].shift(1)+DF['c']
但这不会使用更新后的值“b”

进行此类计算的最佳方法是什么

答复: loc和iloc有帮助。 最好的方法是:

for i in range(1, len(DF)):
  DF.loc[i, 'b'] = DF.loc[i-1, 'b'] + DF.loc[i, 'c']
使用iloc

for i in range(1,len(DF)):
    DF.iloc[i]['b'] = DF.iloc[i-1]['b']+DF.iloc['i']['c']

你确定你的意思不是范围(1,len(DF)):?你想做的特定数学很重要。如果只是简单的加法,您可以使用
cumsum
。如果它更复杂,则可能无法避免在行上循环。在这种情况下,您可能需要更新@TigerhawkT3。我正在把一个R脚本翻译成Python。如果没有看到实际的数学知识,这是不可能的。你需要具体一点。根据您的描述,明显的问题是为什么不在两列上调用
cumsum
?A会有帮助的。魔鬼在于细节…这有点帮助,但产生了带有CopyWarning的
设置。我将其更改为
DF.loc[I,'b']=DF.loc[I-1,'b']+DF.loc['I',c']
,速度更快。是的,您也可以使用以下命令
pa.options.mode.chained_assignment=None\35; default='warn'