如何根据特定列连接两个数据帧?

时间:2017-11-17 08:49:05

标签: python join merge append concat

有2个数据帧具有不同的列。 我试图根据前3列连接它们。

   a b c X
1  H A 8 1
2  M D 3 2
3  H A 9 3
4  L C 9 4

   a b c Y
1  H A 8 4
2  M D 3 3
3  H A 9 2
4  L C 9 2

预期结果:

   a b c X Y
1  H A 8 1 4
2  M D 3 2 3
3  H A 9 3 2
4  L C 9 4 2

我无法找到连接它们的有效方法!!

3 个答案:

答案 0 :(得分:1)

我认为merge应该很好用:

df = pd.merge(df1, df2, on=['a','b','c'])

如果需要动态使用前3列:

print (df1.columns[:3].tolist())
['a', 'b', 'c']

df = pd.merge(df1, df2, on=df1.columns[:3].tolist())
print (df)
   a  b  c  X  Y
0  H  A  8  1  4
1  M  D  3  2  3
2  H  A  9  3  2
3  L  C  9  4  2

但是如果可能的话,前两个列在DataFrame中都是不同的,需要通过它们加入:

cols = df1.columns[:3].tolist()
df2 = df2.rename(columns=dict(zip(df2.columns[:3], cols)))
df = pd.merge(df1, df2, on=cols)

答案 1 :(得分:0)

  • 如果输出顺序无关紧要,
  • a,b,c对于每一行都相同,
  • X& Y对于每一行都是不同的。
  
    
      

ls1 = [设置([' H',' A',8,1]),设置([' H',' A& #39;,8,4])]
      ls1 = set()。union(* ls1)
      print ls1
      设置([' A',1,4,8,' H'])

    
  

答案 2 :(得分:0)

new_df = pd.merge(df1, df2)
print (new_df)

output:-       a  b  c  X  Y
            0  H  A  8  1  4
            1  M  D  3  2  3
            2  H  A  9  3  2
            3  L  C  9  4  2