gpt4 book ai didi

python - Pandas:将小 DataFrame 合并为大 DataFrame,用小 DataFrame 覆盖

转载 作者:行者123 更新时间:2023-12-04 16:10:34 29 4
gpt4 key购买 nike

我正在尝试做一些我认为应该是单行的事情,但我正在努力把它做好。

我有一个大数据框,我们称之为lg,还有一个小数据框,我们称之为sm。每个数据帧都有一个 start 和一个 end 列,以及多个其他列所有这些在两个数据帧之间都是相同的(为简单起见,我们我将调用所有这些列 type)。有时,sm 将具有与 lg 相同的start end,如果就是这样,我希望 smtype 覆盖 lgtype

这是设置:

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_ordered() 等,但都无济于事。我实际上已经让它与 merge_ordered()drop_duplicates() 一起工作,只是意识到它只是删除了字母表中较早的重复项,而不是因为它来自 sm

最佳答案

您可以尝试将startend 列设置为索引,然后使用combine_first:

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

enter image description here

关于python - Pandas:将小 DataFrame 合并为大 DataFrame,用小 DataFrame 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42597857/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com