python - pandas 合并以从数据框中取出两列并对列进行操作

标签 python pandas

我在 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/

相关文章:

python - 使用 Python 请求,我可以将 "data"添加到准备好的请求中吗?

python - Django Rest Framework 在 ListAPIView 上使用 DjangoModelPermissions

验证用户输入的 Pythonic 方式

python - csv 和 xlsx 文件导入到 pandas 数据框 : speed issue

python - 当预测值是匹配的索引对时,如何实现 SVM 模型?

python - Pandas dataframe 连续列的差异与第一个值的比率

python - python的多行微调器?

python - 将图层添加到 keras 预训练模型中

python - 比较 df 列中的值,将匹配项提取到 1 列,将差异提取到另一列

python - 如何在 Pandas 中的后续行之间进行操作?