gpt4 book ai didi

python - Pandas 合并数据帧,覆盖键上的值

转载 作者:行者123 更新时间:2023-11-30 22:07:25 25 4
gpt4 key购买 nike

如果这个问题重复,我深表歉意。我实在找不到这个具体案例的答案。如果键(“id”)也存在于第二个数据帧中,是否可以合并/连接两个数据帧,同时覆盖第一个数据帧中的值?有点像 SQL 中的“INSERT - ON DUPLICATE KEY UPDATE”命令。

第一个数据帧“df1”:

    id      value
0 100010 25
1 100011 22
2 100012 30

第二个数据帧“df2”:

    id      value
0 100012 35
1 100013 36

合并数据帧会产生新列,并保留“id”“100012”的旧数据:

df3 =  pd.merge(df1, df2, on='id', how='outer')
print(df3)

id value_x value_y
0 100010 25.0 NaN
1 100011 22.0 NaN
2 100012 30.0 35.0
3 100013 NaN 36.0

是否可以直接从合并函数获得所需的输出?因此仅更新“id”“100012”并添加新行“100013”?

    id      value
0 100010 25
1 100011 22
2 100012 35
3 100013 36

我已经尝试过merge , join , updatecombine_first ,都没有成功。感谢您的帮助!

最佳答案

编辑:

最简单的方法是:

>>> df1=df1.set_index('id')
>>> df2=df2.set_index('id')

df2上使用combine_first

>>> df2.combine_first(df1)
value
id
100010 25
100011 22
100012 35
100013 36
<小时/>

旧帖子:

作为替代方案,您可以使用标准 python 字典

>>> df1=df1.set_index('id')
>>> df2=df2.set_index('id')

df1制作字典

>>> d = df1.to_dict( 'index' )
>>> d
{'100012': {'value': '30'}, '100010': {'value': '25'}, '100011': {'value': '22'}}

update() 与其他数据帧字典 - 重复的键将使用整行进行更新

>>> d.update( df2.to_dict( 'index' ) )
>>> d
{'100012': {'value': '35'}, '100013': {'value': '36'}, '100010': {'value': '25'}, '100011': {'value': '22'}}

将其重新转换为数据框:

>>> pd.DataFrame.from_dict( d, 'index' )
value
100010 25
100011 22
100012 35
100013 36

如果你想将所有内容都保留在 pandas 中 - RafaelC 的解决方案更好

关于python - Pandas 合并数据帧,覆盖键上的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52468312/

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