我正在嘗試找出一些我可以輕松地在 excel 上執行的東西,但是我很難理解如何在不使用回圈的情況下在 Pandas 資料幀上執行此操作。
假設我有一個如下的資料框:
------------ ------- ------- ----- ------
| Date | Price | Proxy | Div | Days |
------------ ------- ------- ----- ------
| 13/01/2021 | 10 | 20 | 0.5 | NaN |
| 08/01/2021 | NaN | 30 | 0.6 | 5 |
| 04/01/2021 | NaN | 40 | 0.7 | 4 |
| 03/01/2021 | NaN | 50 | 0.8 | 1 |
| 01/01/2021 | NaN | 60 | 0.9 | 2 |
------------ ------- ------- ----- ------
任務是填充價格為空的所有價格。在 excel 中,我認為這Date是id 行 2 的列A和第一行,Date然后在Price我將使用公式的第 2 行中填充 NaN =(B2)/(((C3/C2)*D3)*E3)=2.22。
現在我想使用動態值2.22來填充第 3 行中的 NaNPrice原因是填充第 3 行的 nan 我需要使用填充的第 2 行值。因此,excel 中的公式將填充第 3 行的價格為=(B3)/(((C4/C3)*D4)*E4).
一種方法是回圈遍歷我不想做的所有資料幀行。解決這個問題的矢量化方法是什么?
預期產出
------------ ------- ------- ----- ------
| Date | Price | Proxy | Div | Days |
------------ ------- ------- ----- ------
| 13/01/2021 | 10 | 20 | 0.5 | NA |
| 08/01/2021 | 2.22 | 30 | 0.6 | 5 |
| 04/01/2021 | 0.60 | 40 | 0.7 | 4 |
| 03/01/2021 | 0.60 | 50 | 0.8 | 1 |
| 01/01/2021 | 0.28 | 60 | 0.9 | 2 |
------------ ------- ------- ----- ------
Current_Price = Prev Price (non-nan) / (((Current_Proxy/Prev_Proxy) * Div) * Days)
編輯
使用下面的代碼創建初始資料框
data = {'Date': ['2021-01-13', '2021-01-08', '2021-01-04', '2021-01-03', '2021-01-01'],
'Price':[10, np.nan, np.nan, np.nan,np.nan],
'Proxy':[20, 30, 40, 50, 60],
'Div':[0.5, 0.6, 0.7, 0.8, 0.9],
'Days':[np.nan, 5, 4, 1, 2]}
df = pd.DataFrame(data)
uj5u.com熱心網友回復:
你要實作的其實是一個累加積:
df['Price'] = (df['Price'].combine_first(df['Proxy'].shift()/df.eval('Proxy*Div*Days'))
.cumprod().round(2))
輸出:
Date Price Proxy Div Days
0 2021-01-13 10.00 20 0.5 NaN
1 2021-01-08 2.22 30 0.6 5.0
2 2021-01-04 0.60 40 0.7 4.0
3 2021-01-03 0.60 50 0.8 1.0
4 2021-01-01 0.28 60 0.9 2.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/344012.html
