簡體   English   中英

將 function 應用到引用前一行數據的 dataframe 行

[英]Apply function to dataframe row which references previous row's data

我正在嘗試根據上一行的先前值設置我的 dataframe 的 col 'b'。 有沒有辦法在不遍歷行或對 pd.apply function 使用裝飾器的情況下做到這一點?

偽代碼:

if row != 0:
    curr_row['b'] = prev_row['b'] + curr_row['a']
else: 
    curr_row['b'] = curr_row['a']

這是我嘗試過的:

df = pd.DataFrame({'a': [1,2,3,4,5],
                   'b': [0,0,0,0,0]})

df.b = df.apply(lambda row: row.a if row.name < 1 else (df.iloc[row.name-1].b + row.a), axis=1)

output:

    a   b
0   1   1
1   2   2
2   3   3
3   4   4
4   5   5

所需的 output:

    a   b
0   1   1
1   2   3
2   3   6
3   4   10
4   5   15

如果我在新的df上第二次運行apply function c 的另一行值是正確的:

    a   b
0   1   1
1   2   3
2   3   5
3   4   7
4   5   9

如果我繼續重新運行應用 function 直到 output 正確,則此模式將繼續。

我猜這個問題與應用 function 的工作原理有關,當您使用“應用”同一列的值時,它會中斷。 那或者我只是在某種程度上是個白痴(非常合理)。 有人可以解釋一下嗎?

我必須使用裝飾器來存儲前一行還是有更清潔的方法來做到這一點?

你的要求是cumsum()

df = pd.DataFrame({'a': [1,2,3,4,5],
                   'b': [0,0,0,0,0]})
df.assign(b=df.a.cumsum())

暫無
暫無

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

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