簡體   English   中英

從上一行訪問值 pandas dataframe

[英]Access value from previous row pandas dataframe

我目前正在編寫一些代碼來獲取庫存數量,該代碼取決於物品是先從某處移動還是先移動到某處。 因此,我需要 dataframe 中列的值,該值確定從上一行執行了哪些操作(庫存盤點、庫存移動、使用的庫存等)。

我曾嘗試使用df.shift() ,因為我在回答另一個問題時看到了這一點,但這會返回整個列。 我還需要它是一個字符串,我希望可以使用str()進行轉換,但我還沒有嘗試過。

我當前的簡化代碼是:

if row['Action'] == "Move From":
    if str(df['Action'].shift(1)) == "Move To": # Have tried with and without 1 argument
        # Rest of code
        print('Shift worked')

示例 df 格式將類似於:

Stock Location, Action, Total Quantity, Location Quantity
A1, Stock Count, 500, 500
A1, Move From, 500, 250
A2, Move To, 500, 250
A2, Stock Count, 500, 250
A1, Stock Count, 500, 250

總數量永遠不會因為庫存移動而發生變化,但位置 A1 和 A2 的庫存數量確實發生了變化。 問題是Move To並不總是跟隨Move From ,有時它們是相反的。 為了獲得工廠數量,我總結了存儲庫存的所有位置的數量。我一直在創建一個Temp_Var ,它等於正在移動的庫存量或相應的負數,具體取決於庫存是否正在移動從或到。 但是, Temp_Var僅在第一次移動時需要,如果庫存已經移動,則不需要Temp_Var

為了更加清楚:

使用上面的 dataframe,在第 3 行期間, Total Quantity將等於 A2 行中的數量和臨時變量中的額外 250(因為我們還不知道它移動到哪里),然后在第 4 行期間, Total Quantity將等於A1 和 A2 行中的數量,不需要臨時變量。 因為有時Move To先出現,僅通過檢查'Action' ,我並不總是知道是否需要臨時變量。

實際上,盡管這背后的推理在很大程度上是多余的,並且使實際問題看起來比實際更令人困惑。 我只需要能夠檢查上一行的值

df['Action'].shift(1)創建一個新列,因此您需要在遍歷 dataframe 之前執行此操作,並為其分配一個新名稱:

df['Previous Action'] = df['Action'].shift(1) ,然后在迭代過程中引用新列。

暫無
暫無

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

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