我在pandas df中有一张桌子
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
我想将df2
与df1
合并,以便将price_x和price_y作为列
然后再次divide price_y/price_x
将最终列设为perc_diff
。
所以我尝试使用。
进行合并# 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['perc_diff'] = (df3.price_y - df3.price_x) / df3.price_x
但是当我合并时,我得到了多列product_1
和product_2
例如。合并后我的df3.head(1)
是:
id product_1 product_2 count product_1 product_2 price_x price_y
1 100 200 10 100 200 5 10
那么如何删除product_1
&的这些多列?合并时或合并后product_2
?
答案 0 :(得分:4)
df2_ = df2.set_index('product')
df3 = df.join(df2_, on='product_1') \
.join(df2_, on='product_2', lsuffix='_x', rsuffix='_y')
df3.assign(perc_diff=df3.price_y.div(df3.price_x).sub(1))
答案 1 :(得分:2)
要删除列,必须rename
:
df3 = df1.merge(df2, left_on='product_1', right_on='product') \
.merge(df2.rename(columns={'product':'product_2'}), on='product_2')
#borrow from piRSquared solution
df3 = df3.assign(perc_diff=df3.price_y.div(df3.price_x).sub(1))
print (df3)
id product_1 product_2 count product price_x price_y perc_diff
0 1 100 200 10 100 5 10 1.00
1 3 100 500 30 100 5 25 4.00
2 6 200 500 60 200 10 25 1.50
3 7 100 400 70 100 5 20 3.00
4 2 200 600 20 200 10 30 2.00
5 4 400 100 40 400 20 5 -0.75
6 5 500 700 50 500 25 35 0.40