You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas实现DataFrame列更新及新增ID数据合并?

解决方案:实现DataFrame的更新与新增行需求

你提到的pd.DataFrame.update确实只能更新已存在的行,无法添加新记录。这里有两种简单的方法可以满足你的需求——既用df2更新df1的现有ID值,又把df2中的新ID数据补充到df1里。

方法一:先更新现有行,再追加新行

这种方法逻辑直观,先完成现有ID的更新,再手动添加df2独有的新数据:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3', 'ID4'],
                    'A': [5, 6, 7, 8]})
df2 = pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3', 'ID5', 'ID6', 'ID7'],
                    'A': [5, 1, 8, 7, 8, 9]})

# 1. 复制df1避免修改原数据,将ID设为索引方便匹配
updated_df1 = df1.copy().set_index('ID')
df2_idx = df2.set_index('ID')

# 2. 用df2更新df1中已存在的ID的A值
updated_df1.update(df2_idx)

# 3. 筛选df2中不在df1里的新ID,追加到结果中
new_records = df2_idx[~df2_idx.index.isin(updated_df1.index)]
updated_df1 = pd.concat([updated_df1, new_records]).reset_index()

# 查看最终结果
print(updated_df1)

运行后输出与你期望的完全一致:

ID  A
0  ID1  5
1  ID2  1
2  ID3  8
3  ID4  8
4  ID5  7
5  ID6  8
6  ID7  9

方法二:合并后分组取最新值

这种方法更简洁,利用concat合并两个DataFrame,再按ID分组保留最后出现的记录(因为把df2放在后面,确保它的优先级更高):

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3', 'ID4'],
                    'A': [5, 6, 7, 8]})
df2 = pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3', 'ID5', 'ID6', 'ID7'],
                    'A': [5, 1, 8, 7, 8, 9]})

# 合并df1和df2,df2后置保证重复ID取df2的值
combined = pd.concat([df1, df2])
# 按ID分组,保留每组最后一行并重置索引
updated_df1 = combined.groupby('ID', as_index=False).last()

# 查看最终结果
print(updated_df1)

这个方法的输出结果和方法一完全相同,代码更简洁,适合快速实现需求。

两种方法的适用场景

  • 方法一优势是步骤清晰可控,适合需要在更新/追加前做额外数据校验、转换的场景;
  • 方法二更轻量化,适合不需要中间步骤处理的快速合并需求。

内容的提问来源于stack exchange,提问作者Mohit Aneja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:57:28