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

如何用DF2中的值替换DataFrame DF1的对应数据?

用DF2替换DF1对应ID的指定字段

需求说明

现有两个DataFrame:
DF1:

ID  PRICE  WEIGHT STOCK 
1     20     100    30
2     30     200    10
3     40     300    20

DF2:

ID   WEIGHT   STOCK
2      90       40
3      400      70

需要用DF2中的WEIGHT和STOCK值,替换DF1中相同ID的对应字段,其他字段及未出现在DF2中的ID保持不变,最终得到目标结果。

解决方案(Pandas实现)

最简洁的方式是利用Pandas的update方法,基于ID匹配完成值的覆盖:

import pandas as pd

# 构造原始DataFrame
df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'PRICE': [20, 30, 40],
    'WEIGHT': [100, 200, 300],
    'STOCK': [30, 10, 20]
})

df2 = pd.DataFrame({
    'ID': [2, 3],
    'WEIGHT': [90, 400],
    'STOCK': [40, 70]
})

# 将ID设为索引,确保按ID精准匹配
df1.set_index('ID', inplace=True)
df2.set_index('ID', inplace=True)

# 用df2的指定字段覆盖df1对应位置的值
df1.update(df2)

# 恢复ID为普通列,还原数据结构
df1.reset_index(inplace=True)

# 可选:将浮点型数值转回整数
df1[['WEIGHT', 'STOCK']] = df1[['WEIGHT', 'STOCK']].astype(int)

print(df1)

输出结果

ID  PRICE  WEIGHT  STOCK
0   1     20     100     30
1   2     30      90     40
2   3     40     400     70

原理说明

  • set_index('ID')将ID设为索引,保证后续更新操作是基于相同ID进行匹配,避免错位。
  • update(df2)会遍历df2中的索引和列名,仅覆盖df1中索引、列名均匹配的位置,未匹配到的字段(如PRICE)和ID(如ID=1)保持原值不变。
  • 最后通过reset_index恢复ID为普通列,还原原始数据结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:31