很抱歉,如果这个问题重复。我真的找不到这个特定案例的答案。如果键('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,update和combine_first,但都没有成功。感谢您的帮助!
答案 0 :(得分:2)
编辑:
最简单的方法是:
>>> 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
如果您希望将它们全部保留在大熊猫中-RafaelC的解决方案更好
答案 1 :(得分:1)
仅对不在df2
索引中的索引使用pd.concat
。让
df = df.set_index('id')
df2 = df2.set_index('id')
然后
>>> merged = pd.concat([df[~df.index.isin(df2.index)], df2]).reset_index()
id value
0 100010 25
1 100011 22
2 100012 35
3 100013 36