Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何迭代行并基于前一行计算值_Python_Pandas - Fatal编程技术网

Python:如何迭代行并基于前一行计算值

Python:如何迭代行并基于前一行计算值,python,pandas,Python,Pandas,我有截至2020年7月的销售数据,并希望使用恢复率预测未来3个月。 这是数据帧: test = pd.DataFrame({'Country':['USA','USA','USA','USA','USA'], 'Month':[6,7,8,9,10], 'Sales':[100,200,0,0,0], 'Recovery':[0,1,1.5,2.5,3] }) 这就是它的样子: 现在,

我有截至2020年7月的销售数据,并希望使用恢复率预测未来3个月。 这是数据帧:

test = pd.DataFrame({'Country':['USA','USA','USA','USA','USA'],
             'Month':[6,7,8,9,10],
              'Sales':[100,200,0,0,0],
              'Recovery':[0,1,1.5,2.5,3]
             })
这就是它的样子:

现在,我想在这个数据框中添加一个“预测”列:

test = pd.DataFrame({'Country':['USA','USA','USA','USA','USA'],
             'Month':[6,7,8,9,10],
              'Sales':[100,200,0,0,0],
              'Recovery':[0,1,1.5,2.5,3]
             })

第3行的第一个值300基本上是
(200*1.5/1)
。这将是我们的基础值,因此下一个值,即500基本上是
(300*2.5/1.5)
,依此类推。
从第3行开始,我如何迭代每一行?我尝试使用shift(),但无法对行进行迭代。

您可以这样做:

import pandas as pd
test = pd.DataFrame({'Country':['USA','USA','USA','USA','USA'],
             'Month':[6,7,8,9,10],
              'Sales':[100,200,0,0,0],
              'Recovery':[0,1,1.5,2.5,3]
             })

test['Prediction'] = test['Sales']
for i in range(1, len(test)):
    #prevent division by zero
    if test.loc[i-1, 'Recovery'] != 0:
        test.loc[i, 'Prediction'] = test.loc[i-1, 'Prediction'] * test.loc[i, 'Recovery'] / test.loc[i-1, 'Recovery']

upvote复制粘贴示例!使用
shift()
显示代码,因为这是我的第一个想法。但问题是,您不仅需要来自
销售
恢复
的先前值,还需要来自
预测
的值,这可能会带来问题。非常感谢!这太完美了!:)很高兴我能帮忙。:)快乐编码!