根据条件计算 pandas 数据帧的百分比变化

calculate percent change in pandas dataframe, subject to conditions

我的数据框如下所示:

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]}

数据显示每件 sold_price 作品每次拍卖的 sold_price。数据显示,例如'Portrait of Dr. Gachet'第一次卖出,卖出了1000.0币。同一幅画第二次卖出,卖出6000.0币。

'serialized_trx'是每次转售商品的计数器。 'Portrait of Dr. Gachet'第一次拍卖时卖了1000.0币,所以'serialized_trx' = 1。[=44时卖了6000币=] = 2.

我需要附加一列,以迭代方式显示每笔交易的价值变化百分比。例如,'Portrait of Dr. Gachet' 系列 2(相对于系列 1)的值变化百分比为 500%。 'Portrait of Dr. Gachet' 序列 3(相对于序列 2)的值变化百分比为 233.33%。

我想针对 'item' = X 和 'serialized_trx' start = 的每个配对条件重复此操作n 和 finish = n - 1,这样我就可以跟踪每个 'item' 每次易手时的价值变化。

数据框末尾应有一个新列,如下所示(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]}

任何人都可以帮助矢量化或以其他方式iterate/compute这个百分比变化,其中项目必须等于同一项目并且交易序列号必须是迭代的(n,n - 1)?

试试这个:

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