我有两个数据帧
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
,它将等效于合并的df1
和df2
,将具有来自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
我无法使用merge
、col1
0或concat
进行此操作。我确信这是一件非常简单的事情,但我就是无法理解其中的逻辑。
请注意,col3值取决于col1和col2 的组合
您可以在列col1
和col2
上执行以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