python - 将值分配给不同行中的相同名称

标签 python pandas

我是Python新手。我在 df2 列中有多个相同的名称,假设我不想在 df2 中删除重复的名称。

如何将 df1 中的值(标记)分配给 df2 中不同行中的相同名称?

df1 = pd.DataFrame({'Name': ['rumul', 'rahul',
                             'ravi', 'imran'],
                    'Marks': [5, 20, 8, 12]})
 
df2 = pd.DataFrame({'Name': ['rumul', 'rahul',
                             'rahul', 'ravi',
                             'imran','ravi', 'ravi','imran','rahul','ravi'],
                    'Marks': ['','','','','','','','','','']}) 

df1

<表类=“s-表”> <标题> 姓名 标记 <正文> 罗穆尔 5 拉胡尔 20 拉维 8 伊姆兰 12

df2

<表类=“s-表”> <标题> 姓名 标记 <正文> 罗穆尔 拉胡尔 拉胡尔 拉维 伊姆兰 拉维 拉维 伊姆兰 拉胡尔 拉维

预期输出:

<表类=“s-表”> <标题> 姓名 标记 <正文> 罗穆尔 5 拉胡尔 20 拉胡尔 20 拉维 8 伊姆兰 12 拉维 8 拉维 8 伊姆兰 12 拉胡尔 20 拉维 8

最佳答案

您可以使用映射来避免 merge() 的需要。因为合并会添加额外的列,但不一定会覆盖它。

df2['Marks'] = df2['Name'].map(df1.set_index('Name').to_dict()['Marks'])

这将输出:

    Name  Marks
0  rumul      5
1  rahul     20
2  rahul     20
3   ravi      8
4  imran     12
5   ravi      8
6   ravi      8

对于相同的输出,您可以使用 pandas replace()

关于python - 将值分配给不同行中的相同名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70026773/

相关文章:

python - 强制返回 "View"而不是在 Pandas 中复制?

python - 将 Django 站点放在另一个 Django 站点的子目录中

python - 将不同版本的 Python 包的不同版本上传到奶酪店

python - 使用 python Bokeh 分组条形图更改条形宽度?

python - 按最后日期的唯一名称和状态分组

Python pandas 迭代数据框

python 生成器到 pandas 数据框

python - 如何将 Windows 时区转换为 pytz 理解的时区?

python - CommandError : App 'books' has migrations. 应用有迁移时只能使用sqlmigrate和sqlflush命令

python - 安装多个版本的 python 运行 py2exe