简体   繁体   English

如何根据所选列中的值连接两个数据帧?

[英]How do I join two dataframes based on values in selected columns?

I am trying to join (merge) two dataframes based on values in each column. 我试图根据每列中的值加入(合并)两个数据帧。 For instance, to merge by values in columns in A and B. So, having df1 例如,要按A和B中的列进行合并。因此,请使用df1

    A  B  C  D  L
0   4  3  1  5  1
1   5  7  0  3  2
2   3  2  1  6  4

And df2 和df2

    A  B  E  F  L
0   4  3  4  5  1 
1   5  7  3  3  2 
2   3  8  5  5  5

I want to get a d3 with such structure 我想得到一个具有这种结构的d3

    A     B     C     D     E     F     L
0   4     3     1     5     4     5     1
1   5     7     0     3     3     3     2
2   3     2     1     6     Nan   Nan   4
3   3     8     Nan   Nan   5     5     5

Can you, please help me? 你能帮我么? I've tried both merge and join methods but havent succeed. 我已经尝试了合并和连接方法,但还没有成功。

UPDATE: (for updated DFs and new desired DF) 更新:(用于更新的DF和新的所需DF)

In [286]: merged = pd.merge(df1, df2, on=['A','B'], how='outer', suffixes=('','_y'))

In [287]: merged.L.fillna(merged.pop('L_y'), inplace=True)

In [288]: merged
Out[288]:
   A  B    C    D    L    E    F
0  4  3  1.0  5.0  1.0  4.0  5.0
1  5  7  0.0  3.0  2.0  3.0  3.0
2  3  2  1.0  6.0  4.0  NaN  NaN
3  3  8  NaN  NaN  5.0  5.0  5.0

Data: 数据:

In [284]: df1
Out[284]:
   A  B  C  D  L
0  4  3  1  5  1
1  5  7  0  3  2
2  3  2  1  6  4

In [285]: df2
Out[285]:
   A  B  E  F  L
0  4  3  4  5  1
1  5  7  3  3  2
2  3  8  5  5  5

OLD answer: 老答案:

you can use pd.merge(..., how='outer') method: 你可以使用pd.merge(...,how ='outer')方法:

In [193]: pd.merge(a,b, on=['A','B'], how='outer')
Out[193]:
   A  B    C    D    E    F
0  4  3  1.0  5.0  4.0  5.0
1  5  7  0.0  3.0  3.0  3.0
2  3  2  1.0  6.0  NaN  NaN
3  3  8  NaN  NaN  5.0  5.0

Data: 数据:

In [194]: a
Out[194]:
   A  B  C  D
0  4  3  1  5
1  5  7  0  3
2  3  2  1  6

In [195]: b
Out[195]:
   A  B  E  F
0  4  3  4  5
1  5  7  3  3
2  3  8  5  5

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM