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()
我知道我错过了一些简单的东西。非常感谢。