我在 pandas df 中有一张 table
id product_1 product_2 count
1 100 200 10
2 200 600 20
3 100 500 30
4 400 100 40
5 500 700 50
6 200 500 60
7 100 400 70
我在数据框 df2 中还有另一个表
product price
100 5
200 10
300 15
400 20
500 25
600 30
700 35
我必须在我的第一个 df 中创建一个新列 price_product2,从 df2 中获取关于 product_2 的价格值。 并找出 product_2 相对于 product_1 的百分比差异 并制作一列 %_diff 。
即 假设 product_1 = 100 和 product_2 = 200。因此 product_2 是 100 价格的 200%。
同样,如果product_1 = 400 且product_2 = 100,则为价格下跌。 因此 product_2 是 product_1 的 -25%。
我的最终输出应该是。 df =
id product_1 product_2 count price_product_2 %_diff
1 100 200 10 10 +200
2 200 600 20 30 +300
3 100 500 30 25 +500
4 400 100 40 5 -25
5 500 700 50 35 +140
6 200 500 60 25 +250
7 100 400 70 20 -71.42
有什么实现方法吗?
我正在尝试使用 map 功能。
df['price_product_2'] = df['product_2'].map(df2.set_index('product_id')['price'])
但我只能得到一列,如何得到 %_diff 列?
请您参考如下方法:
使用merge(或map)两次,每个产品一次,然后计算差值。
# Add prices for products 1 and 2
df3 = (df1.
merge(df2, left_on='product_1', right_on='product').
merge(df2, left_on='product_2', right_on='product'))
# Calculate the percent difference
df3['pct_diff'] = (df3.price_y - df3.price_x) / df3.price_x
