我正在尋找一種有效的方法來根據來自不同列的前一行的值設定新列。想象一下你有這個 DataFrame:
pd.DataFrame([[0, 22], [1, 15], [2, 18], [3, 9], [4, 10], [6, 11], [8, 12]],
columns=['days', 'quantity'])
days quantity
0 0 22
1 1 15
2 2 18
3 3 9
4 4 10
5 6 11
6 8 12
現在,我想要第三列“quantity_3days_ago”,如下所示:
days quantity quantity_3days_ago
0 0 22 NaN
1 1 15 NaN
2 2 18 NaN
3 3 9 22
4 4 10 15
5 6 11 9
6 8 12 10
所以我需要使用“天”列來檢查“數量”列在 3 天前的內容。如果 'days' 列中沒有確切的值,我希望 'quantity_3days_ago' 是前一行的值。以最后一行為例:8 - 3 將是 5,在這種情況下,我將采用天數等于 4 的行的“數量”值作為“quantity_3days_ago”。我希望這是可以理解的。我嘗試使用滾動視窗和移位,但無法獲得所需的結果。我想在整個 DataFrame 上回圈可能是可能的。然而,這將是相當低效的。我想知道這是否可以在一行中完成。謝謝你的幫助!
uj5u.com熱心網友回復:
我們reindex之前可以做shift
rng = range(df.days.iloc[0],df.days.iloc[-1] 1)
df['new'] = df.days.map(df.set_index('days').reindex(rng ,method='ffill')['quantity'].shift(3))
df
Out[125]:
days quantity new
0 0 22 NaN
1 1 15 NaN
2 2 18 NaN
3 3 9 22.0
4 4 10 15.0
5 6 11 9.0
6 8 12 10.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360300.html
上一篇:為什么我的預定作業會自動運行?
下一篇:將函式應用于資料框不起作用
