是否将所有joincolumn数据放在一个输出列而不是两个输出列下?

2024-10-01 11:31:40 发布

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

我有两个CSV文件,具有以下模式:

CSV1列:

"Id","First","Last","Email","Company"

CSV2列:

"PersonId","FirstName","LastName","Em","FavoriteFood"

如果我将它们分别加载到Pandas数据帧中并执行newdf = df1.merge(df2, how='outer', left_on=['Last', 'First'], right_on=['LastName','FirstName'])

然后,联接数据帧的CSV导出具有以下架构:

"Id","First","Last","Email","Company","PersonId","FirstName","LastName","Em","FavoriteFood"
  • 所有只在CSV1中的行都在下面打印了名字 “首先。”
  • 所有只在CSV2中出现的行都在下面打印了名字 “名字。”
  • 两个CSV文件中的所有行都有第一个 名称(完全相同的值-这是意料之中的,因为它是一个 “join on”值)打印在两列下
  • “Last”的问题相同&姓氏。“

我想要的是更像这样的输出模式:

"Id","First","Last","Email","Company","PersonId","Em","FavoriteFood"
  • 它应该在“first”列下有所有的“first name”(相当于“Last”)

我所熟悉的大多数关系数据库软件都是这样的(左边的join列名赢得了命名战)。熊猫有语法来指示它这样做吗

我可以做df1.merge(df2.rename(columns = {'LastName':'Last', 'FirstName':'First'}), how='outer', on=['Last', 'First']),但从风格上讲,在源代码中硬编码两次相同的列名会让我发疯。如果我更改CSV文件中的列名,就更难修复了


Tags: 文件csvidonemail模式firstname名字