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