2016-11-25 71 views
1

我有兩個數據框。我想將它們合併到鍵typeA和typeB上。我想將它們合併在兩個鍵合併python中的兩個鍵上的兩個數據框

# df_a 
    typeA typeB value 
0 b a  3 
1 c d  4 


# df_b 
    typeA typeB value 
0 a b  1 
1 c d  2 
pd.merge(df_a,df_b,on=['typeA','typeB']) 
typeA typeB value_x value_y 
0 c d  4   2 

中的任一個,但我所要求的結果是

typeA typeB value_x value_y 
0 c  d  4   2 
1 a  b  3   1 

只要類型對匹配,我將它們合併在一起。這意味着我想要

(df_a['typeA']=df_b['typeA'] And df_a['typeB']=df_b['typeB']) or (df_a['typeA']=df_b['typeB'] And df_a['typeB']=df_b['typeA']) 

我認爲可以通過切換df_b的列名並再次合併過程來完成。之後將兩個合併結果合併在一起。只是想知道是否有更有效的方法來解決這個問題。

+0

將輸出是什麼,如果不是在''df_a' C' /'D' - 你有'了'/'D' ? –

回答

1

一個可能的解決方案是sorted列連接前merge

df_a[['typeA','typeB']] = df_a[['typeA','typeB']].apply(sorted, axis=1) 
df_b[['typeA','typeB']] = df_b[['typeA','typeB']].apply(sorted, axis=1) 
print (df_a) 
    typeA typeB value 
0  a  b  3 
1  c  d  4 

print (df_b) 
    typeA typeB value 
0  a  b  1 
1  c  d  2 

df1 = pd.merge(df_a,df_b,on=['typeA','typeB']) 
print (df1) 
    typeA typeB value_x value_y 
0  a  b  3  1 
1  c  d  4  2 
+0

非常感謝! – ttoddfox