如何基于相同索引,用第二个DataFrame更新第一个DataFrame的指定列值
基于相同索引用第二个DataFrame更新第一个DataFrame的方法
原始数据
第一个DataFrame(df1):
A B C 0 a-1 b-1 c-1 1 a-2 b-2 NaN 2 a-3 b-3 NaN 3 a-4 b-4 c-4
第二个DataFrame(df2):
C 1 c-2 2 c-3
期望结果
A B C 0 a-1 b-1 c-1 1 a-2 b-2 c-2 2 a-3 b-3 c-3 3 a-4 b-4 c-4
解决方案
方法1:使用update()方法
update()会根据索引和列名匹配,用df2的值覆盖df1对应位置的内容,默认直接修改原DataFrame(如需保留原数据可先复制)。
示例代码:
import pandas as pd import numpy as np # 构造原始DataFrame df1 = pd.DataFrame({ 'A': ['a-1', 'a-2', 'a-3', 'a-4'], 'B': ['b-1', 'b-2', 'b-3', 'b-4'], 'C': ['c-1', np.nan, np.nan, 'c-4'] }) df2 = pd.DataFrame({'C': ['c-2', 'c-3']}, index=[1, 2]) # 执行更新(如需保留原df1,先复制:df_updated = df1.copy()) df1.update(df2) print(df1)
方法2:使用combine_first()方法
该方法会用df2的值填充df1中的缺失值,返回新的DataFrame,不修改原数据。
示例代码:
df_updated = df1.combine_first(df2) print(df_updated)
方法3:通过loc索引直接赋值
针对指定的索引和列手动赋值,适合明确知道更新范围的场景。
示例代码:
df1.loc[df2.index, 'C'] = df2['C'] print(df1)
内容的提问来源于stack exchange,提问作者M Kravets
相关产品推荐
相关产品推荐

