在python

时间:2016-11-25 07:41:43

标签: python pandas merge

我有两个数据帧。我想在键typeA和typeB上合并它们。我想在两个键中的任何一个上合并它们

# 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的列名来完成并再次进行合并处理。之后将两个合并结果合并在一起。只是想知道是否有更有效的方法来解决这个问题。

1 个答案:

答案 0 :(得分:2)

一种可能的解决方案是在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