基于第二个d替换python列中的值

2024-09-30 14:28:49 发布

您现在位置:Python中文网/ 问答频道 /正文

关于stackoverflow,我已经讨论了所有类似的问题,但是解决方案仍然不适合我

我有两个dfs:

df1:
User_ID |    Code_1
123           htrh
345           NaN
567           cewr
...

df2:
User_ID |    Code_2
123           ert
345           nad

我想根据用户ID将df1.Code\u 1替换为df2.Code\u 2。请注意,df2是df1的用户ID的子集

我试过了

df1['Code_1'] = df1['User_ID'].replace(df2.set_index('User_ID')['Code_2'])

我试过这个

df1.loc[df1.User_ID.isin(df2.User_ID), ['Code_1']] = df2[['Code_2']]

两个都没用。什么都没变

预期产量:

df1:
    User_ID |    Code_1
    123           ert
    345           nad
    567           cewr
    ...

谢谢


Tags: 用户idcodenan解决方案stackoverflow子集df1
3条回答

使用DataFrame.update。在调用函数之前,id列(User_ID)和code列(Code_1Code_2)应该在数据帧中具有相同的名称

df2.columns = ['User_ID', 'Code_1']
df1.update(df2)

你的案子就够了。对于其他用途,请参考documentation

您可以使用^{}+^{}

df1['Code_1'] = df1['User_ID'].map(df2.set_index('User_ID')['Code_2'])\
                              .fillna(df1['Code_1'])

print(df1)

#    User_ID Code_1
# 0      123    ert
# 1      345    nad
# 2      567   cewr

其思想是在执行映射时对齐索引,如果df2中不存在映射,则用原始值填充索引

你可以先用联合收割机

df2.set_index('User_ID').Code_2.combine_first(df1.set_index('User_ID').Code_1)


User_ID
123     ert
345     nad
567    cewr

相关问题 更多 >