Ali*_*Ali 1 merge python-3.x pandas
我有以下数据框:
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]})
Run Code Online (Sandbox Code Playgroud)
我想在 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]})
Run Code Online (Sandbox Code Playgroud)
或者
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]})
Run Code Online (Sandbox Code Playgroud)
我可以执行以下操作:
pd.merge(df1,df2,on=['fr','to'],how='left')
Run Code Online (Sandbox Code Playgroud)
然而,正如预期的那样,第二行的 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
Run Code Online (Sandbox Code Playgroud)