簡體   English   中英

Python:如何迭代行並根據前一行計算值

[英]Python: How to iterate over rows and calculate value based on previous row

我有截至 2020 年 7 月的銷售數據,並希望使用恢復率來預測未來 3 個月。 這是 dataframe:

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]
             })

這是它的外觀:

在此處輸入圖像描述

現在,我想在 dataframe 中添加一個“預測”列:

在此處輸入圖像描述

第 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']

您擁有的順序是恢復 * 基本水平(銷售額 = 200)

您可以像這樣計算該序列:

valid_sales = test.Sales > 0
prediction = (test.Recovery * test.Sales[valid_sales].iloc[-1]).rename("Predicted")

然后按索引、插入列或 concat 組合:

pd.concat([test, prediction], axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM