2016-11-25 12 views
1

私は2つのデータフレームを持っています。私はtypeAとtypeBのキーでそれらをマージしたいと思います。私は2つのキーPythonの2つのキーで2つのデータフレームをマージします

# 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の列名を切り替えて再度プロセスをマージすることで実現できると思いました。その後、2つのマージ結果を結合します。この問題を解決するためのより効率的な方法があるかどうか疑問に思うだけです。 merge前に、参加のため

+0

- あなたが持っていた 'A' /' D' ? –

答えて

1

一つの可能​​な解決策はsorted列である:出力は代わりにdf_a` `で 'C' /` D 'の場合はどうだろう

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

関連する問題