根据条件计算 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
我的数据框如下所示:
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