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



我有两个数据帧

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

两个数据帧中的CCD_ 1和CCD_。这两个数据帧之间的唯一区别是,与df1相比,df2有一些缺失的行。

我需要另一个数据帧df3,它将等效于合并的df1df2,将具有来自df1的所有行,将具有另一列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

我无法使用mergecol10或concat进行此操作。我确信这是一件非常简单的事情,但我就是无法理解其中的逻辑。

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

您可以在列col1col2上执行以df1为基础的.merge()和以df2为左合并(与how='left'(,如下所示:

df3 = df1.merge(df2, on=['col1', 'col2'], how='left')

对于how='left',Pandas只使用左帧中的关键帧,类似于SQL左外连接;保留密钥顺序。因此,CCD_ 19的行索引将被保留。

结果:

print(df3)

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

最新更新