Python 熊猫:将小数据帧合并为大数据帧,用小数据帧覆盖

Python 熊猫:将小数据帧合并为大数据帧,用小数据帧覆盖,python,pandas,merge,Python,Pandas,Merge,我正在尝试做一些我认为应该是一行的事情,但我正在努力使它正确 我有一个大数据框,我们称之为lg,还有一个小数据框,我们称之为sm。每个数据帧都有一个开始和一个结束列,以及多个其他列,所有这些列在两个数据帧之间都是相同的(为简单起见,我们将所有这些列都称为类型)。有时,sm将具有与lg相同的start和end,如果是这种情况,我希望sm的类型覆盖lg的类型 以下是设置: lg = pd.DataFrame({'start':[1,2,3,4], 'end':[5,6,7,8], 'type':['

我正在尝试做一些我认为应该是一行的事情,但我正在努力使它正确

我有一个大数据框,我们称之为
lg
,还有一个小数据框,我们称之为
sm
。每个数据帧都有一个
开始
和一个
结束
列,以及多个其他列,所有这些列在两个数据帧之间都是相同的(为简单起见,我们将所有这些列都称为
类型
)。有时,
sm
将具有与
lg
相同的
start
end
,如果是这种情况,我希望
sm
类型
覆盖
lg
类型

以下是设置:

lg = pd.DataFrame({'start':[1,2,3,4], 'end':[5,6,7,8], 'type':['a','b','c','d']})
sm = pd.DataFrame({'start':[9,2,3], 'end':[10,6,11], 'type':['e','f','g']})
…请注意,唯一匹配的
['start','end']
组合是
['2','6']

我的期望输出:

   start  end type
0      1    5    a
1      2    6    f    # where sm['type'] overwrites lg['type'] because of matching ['start','end']
2      3    7    c
3      3   11    g    # where there is no overwrite because 'end' does not match
4      4    8    d
5      9   10    e    # where this row is added from sm

我尝试了多个版本的
.merge()
merge\u ordered()
,但都没有用。实际上,我让它与
merge\u ordered()
drop\u duplicates()
一起工作,结果发现它只是删除了字母表中较早的重复项,不是因为它来自
sm

您可以尝试将
开始
结束
列设置为索引,然后首先使用
合并

sm.set_index(['start', 'end']).combine_first(lg.set_index(['start', 'end'])).reset_index()

我知道我错过了一些简单的东西。非常感谢。