首页 > 解决方案 > 忽略顺序合并多列上的数据框

问题描述

我有以下数据框:

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。

感谢您的帮助。

标签: python-3.xpandasmerge

解决方案


你需要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

推荐阅读