如何基于索引用另一个DataFrame的列值替换某DataFrame的列值
问题:合并DataFrame时替换指定索引的部门数据
我有两个DataFrame:
df_1的结构如下:
df_1= Index ID Department 0 1895001 Media 1 1895001 Sales 2 1895001 HR ... 690 2060829 Marketing 941 1782054 Finance 952 1742360 Marketing 1060 1834992 Marketing 1064 1809653 Finance
df_2是部分索引的更新数据:
df_2= Index ID Department 690 2060829 Engineering 941 1782054 IT 952 1742360 Engineering 1060 1834992 Engineering 1064 1809653 IT
我尝试用以下代码合并,但没得到想要的结果:
df = pd.merge(df_1, df_2, left_index=True, right_index=True)
期望得到的结果是:保留df_1的所有索引,仅用df_2的Department替换df_1中对应索引的部门数据,其余数据不变:
df = Index ID Department 0 1895001 Media 1 1895001 Sales 2 1895001 HR ... 690 2060829 Engineering 941 1782054 IT 952 1742360 Engineering 1060 1834992 Engineering 1064 1809653 IT
正确解决方案
你用的pd.merge会只保留两个表共有的索引,还会生成重复列(比如ID_x、Department_y),不符合需求。应该用数据覆盖更新的方法:
方法1:使用update
update会直接用df_2的匹配值覆盖df_1对应位置的数据,操作简单高效:
# 复制df_1避免修改原数据 df = df_1.copy() # 用df_2的Department列更新df的对应索引数据 df['Department'].update(df_2['Department'])
方法2:使用combine_first
combine_first会优先保留df_2的数据,然后用df_1填充df_2中没有的索引数据,最后按原df_1的索引排序保持顺序:
df = df_2.combine_first(df_1) # 恢复df_1的原始索引顺序 df = df.loc[df_1.index]
两种方法都能得到你期望的结果,其中update更适合只更新单一列的场景,效率更高。
内容的提问来源于stack exchange,提问作者dagi_de
相关产品推荐
相关产品推荐

