python-3.x - 忽略顺序合并多列上的数据框
问题描述
我有以下数据框:
df1=pd.DataFrame({'fr':[1,2,3],'to':[4,5,6],'R':[0.1,0.2,0.3]})
df2=pd.DataFrame({'fr':[1,5,3],'to':[4,2,6],'X':[0.4,0.5,0.6]})
我想在fr和to上合并这两个数据帧,忽略fr和to的顺序,即(2,5)与(5,2)相同。所需的输出是:
dfO=pd.DataFrame({'fr':[1,2,3],'to':[4,5,6],'R':[0.1,0.2,0.3],'X':[0.4,0.5,0.6]})
或者
dfO=pd.DataFrame({'fr':[1,5,3],'to':[4,2,6],'R':[0.1,0.2,0.3],'X':[0.4,0.5,0.6]})
我可以执行以下操作:
pd.merge(df1,df2,on=['fr','to'],how='left')
但是,正如预期的那样,第二行的 X 值为 NaN。
感谢您的帮助。
解决方案
你需要numpy
sort
先做
df1[['fr','to']] = np.sort(df1[['fr','to']].values,1)
df2[['fr','to']] = np.sort(df2[['fr','to']].values,1)
out = df1.merge(df2,how='left')
out
Out[44]:
fr to R X
0 1 4 0.1 0.4
1 2 5 0.2 0.5
2 3 6 0.3 0.6
推荐阅读
- angular - 如何在条形图中显示值的总和(Kendo angular 4)
- laravel - 如何在 Laravel 的命名路由中传递参数
- angular - Intellij 中没有 Angular 语法着色
- c# - Unity 卡片中从右到左的字母
- spring - java.lang.AbstractMethodError 与 Spring-data-elasticsearch
- c++ - 分隔字符行形成数据
- python - 如何在 Python 中从文件中加载变量
- php - 如何在 PHP 中比较来自不同 foreach 循环的两个值?
- android - 如何在 ARCore Android 中禁用表面检测
- rest - 将 Solr 与加密(标记化)索引值一起使用