我有一個看起來像的資料框:
df = pd.DataFrame({'name': ['Portrait of Dr. Gachet', 'Salvator Mundi','Interchange'], 'sold_price': [1000.0, 5000.0, 2500.0, 6000.0, 8000.0, 16000.0, 20000.0, 9000.0, 40000.0], 'serialized_trx': [1, 1, 1, 2, 2, 2, 3, 3, 3]}
資料顯示了每次拍賣時每個名稱的藝術品的售價。例如,資料顯示,《加歇博士的肖像》第一次售出時,售價為 1000.0 貨幣。同一幅畫第二次售出,售價為 6000.0 貨幣。
'serialized_trx'列是每次重新銷售商品時的計數器。'Gachet博士的肖像'第一次拍賣時以1000.0貨幣出售,因此'serialized_trx' = 1。當'serialized_trx' = 2時,它以6000貨幣出售。
我需要附加一列,以迭代方式顯示每筆交易的價值變化百分比。例如,“Gachet 博士的肖像”系列 2(與系列 1)的值變化百分比為 500%。“Gachet 博士的肖像”系列 3(與系列 2)的價值變化百分比為 233.33%。
我想對每對條件重復此操作,其中'item' = X 和'serialized_trx' start = n 和 finish = n - 1,這樣我就可以在每次易手時跟蹤每個“專案”的價值變化。
資料幀的末尾應該有一個新列,如下所示(pct_change,其中 serialized_trx = 1 為 0.0,因為沒有先前的事務可作為基礎):
df = pd.DataFrame({'name': ['Portrait of Dr. Gachet', 'Salvator Mundi','Interchange'], 'sold_price': [1000.0, 5000.0, 2500.0, 6000.0, 8000.0, 16000.0, 20000.0, 9000.0, 40000.0], 'serialized_trx': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'pct_change': [0.0, 0.0, 0.0, 500.0, 60.0, 166.67, 233.33, 12.5, 150.0]}
任何人都可以幫助矢量化或以其他方式迭代/計算此百分比變化,其中專案必須等于相同的專案并且交易序列號必須是迭代的(n,n - 1)?
uj5u.com熱心網友回復:
試試這個:
df['pct_change'] = df.groupby('name')['sold_price'].pct_change().mul(100).fillna(0).round(2)
輸出:
>>> df
name sold_price serialized_trx pct_change
0 Portrait of Dr. Gachet 1000.0 1 0.00
1 Salvator Mundi 5000.0 1 0.00
2 Interchange 2500.0 1 0.00
3 Portrait of Dr. Gachet 6000.0 2 500.00
4 Salvator Mundi 8000.0 2 60.00
5 Interchange 16000.0 2 540.00
6 Portrait of Dr. Gachet 20000.0 3 233.33
7 Salvator Mundi 9000.0 3 12.50
8 Interchange 40000.0 3 150.00
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387626.html
