假設我有一個如下的資料框:
--------- ------- ------------
| Product | Price | Calculated |
--------- ------- ------------
| A | 10 | 10 |
| B | 20 | NaN |
| C | 25 | NaN |
| D | 30 | NaN |
--------- ------- ------------
可以使用以下代碼創建上述內容:
data = {'Product':['A', 'B', 'C', 'D'],
'Price':[10, 20, 25, 30],
'Calculated':[10, np.nan, np.nan, np.nan]}
df = pd.DataFrame(data)
我想calculated即時更新列。對于第 2 行,第 2 行的calculated = Prv. calculated / Previous Priceiecalculated是10/10=1
現在我們有第 2calculated行的值,第3calculated行將是1/20等等。
預期產出
--------- ------- ------------
| Product | Price | Calculated |
--------- ------- ------------
| A | 10 | 10 |
| B | 20 | 1 |
| C | 25 | 0.05 |
| D | 30 | 0.002 |
--------- ------- ------------
以上可以使用回圈來實作,但我不想使用回圈,而是需要一種矢量化方法來更新 column Calculated。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
您正在尋找cumprod一個shift:
# also `df['Calculated'].iloc[0]` instead of `.ffill()`
df['Calculated'] = df['Calculated'].ffill()/df.Price.cumprod().shift(fill_value=1)
輸出:
Product Price Calculated
0 A 10 10.000
1 B 20 1.000
2 C 25 0.050
3 D 30 0.002
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/344020.html
上一篇:使用正則運算式洗掉星號和空行
