以保留索引的方式合并两个数据帧

时间:2021-05-17 15:52:47

标签: python pandas dataframe

我有两个数据框

df1 = pd.DataFrame({'col1': ['a', 'b', 'c', 'd', 'e', 'a', 'b'], 'col2': ['p', 'q', 'r', 's', 't', 'q', 't']})
df1
[Output]:
    col1    col2
0   a        p
1   b        q
2   c        r
3   d        s
4   e        t
5   a        q
6   b        t

df2 = pd.DataFrame({'col1': ['a', 'b', 'c', 'e', 'b'], 'col2': ['p', 'q', 'r', 't', 't'], 'col3': ['val0', 'val1', 'val2', 'val3', 'val4']})
df2
[Output]:

   col1 col2 col3
0   a    p   val0
1   b    q   val1
2   c    r   val2
3   e    t   val3
4   b    t   val4

两个数据帧中的

col1col2 是相同的。两个数据帧之间的唯一区别是 df2 与 df1 相比缺少一些行。

我需要另一个数据框 df3,它相当于合并的 df1df2,将包含来自 df1 的所有行,将具有另一列 {{1 }} 并且还会保留来自 col3 的索引。 例如:

df1

我无法使用 df3 [Output]: col1 col2 col3 0 a p val0 1 b q val1 2 c r val2 3 d s Nan 4 e t val3 5 a q Nan 6 b t val4 mergejoin 完成这项工作。我确信这是非常简单的事情,但我无法理解逻辑。

请注意,col3 的值取决于 col1 和 col2 的组合

1 个答案:

答案 0 :(得分:1)

您可以使用 df1 作为基础和左合并(使用 how='left')与 df2 合并 col1 和 { {1}},如下:

col2

使用 df3 = df1.merge(df2, on=['col1', 'col2'], how='left') ,Pandas 只使用左框架的键,类似于 SQL 左外连接;保留密钥顺序。因此,how='left' 的行索引将被保留。

结果:

df1