我在 pandas 数据框 df 中有一个表
Leafid pidx pidy value
100 1 3 10
100 2 6 12
200 5 7 48
300 7 1 11
我有另一个数据框 df2,其中有
pid price
1 10
2 20
3 30
4 40
5 50
6 60
7 70
我想合并 df 和 df2,这样我就有另外两列的 price_pidx 和 Price_pidy
然后还进行 price_pidy/price_pidx
例如:
Leafid pidx pidy值price_pidxprice_pidyprice_pidy/price_pidx
`100 1 3 10 10 30 3`
我的最终 df 应该有列
pidx pidy value price_pidx/price_pidy
我不想在其中使用.map()
。
有没有办法使用pd.merge
来做到这一点?
我知道如何携带一列 price_pidx
但如何携带两列?
例如。
pd.merge(df,df2['pid','price'],how = left, left_on = 'pidx' right_on = 'pid')
但是如何同时带上price_pidx和price_pidy
最佳答案
如果没有map
,它会很复杂,因为需要通过melt
reshape ,然后合并
最后unstack
:
df = pd.melt(df, id_vars='value', value_name='pid', var_name='g')
df2 = pd.merge(df,df2[['pid','price']], how='left', on = 'pid')
df2 = df2.set_index(['value','g']).unstack()
df2.columns = ['_'.join(col) for col in df2.columns]
df2['col'] = df2.price_pidy / df2.price_pidx
df2 = df2.rename(columns={'pid_pidx':'pidx','pid_pidy':'pidy'})
print (df2)
pidx pidy price_pidx price_pidy col
value
10 1 3 10 30 3.000000
11 7 1 70 10 0.142857
12 2 6 20 60 3.000000
48 5 7 50 70 1.400000
关于python - pandas 合并以从数据框中取出两列并对列进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569381/