如何用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
相关产品推荐
相关产品推荐

