【问题标题】:Pandas merge two dataframes without duplicating column熊猫合并两个数据框而不重复列
【发布时间】:2017-11-26 13:33:42
【问题描述】:

我的问题类似于Pandas Merge - How to avoid duplicating columns,但我找不到下面具体示例的解决方案。

我有 DateFrame df:

Customer    Address
J. Smith    10 Sunny Rd Timbuktu

和 Dataframe 电子邮件:

Name        Email
J. Smith    j.smith@myemail.com

我想合并两个数据框来生成:

Customer    Address                 Email
J. Smith    10 Sunny Rd Timbuktu    j.smith@myemail.com

我正在使用以下代码:

data_names = {'Name':data_col[1], ...}
mapped_name = data_names['Name']
df = df.merge(emails, how='inner', left_on='Customer', right_on=mapped_name)

结果是:

Customer    Address                 Email                 Name
J. Smith    10 Sunny Rd Timbuktu    j.smith@myemail.com   J. Smith

虽然我可以删除名为 mapped_name 的列,但 mapped_name 有可能是“客户”,在这种情况下,我不想删除两个客户列。

有什么想法吗?

【问题讨论】:

  • 您甚至可以使用 df.drop(mapped_name, axis=1, inplace=True) 删除不需要的列

标签: python pandas


【解决方案1】:

我认为您可以将email 数据框中的第一列重命名为Customerhow='inner' 可以省略,因为默认值:

emails.columns = ['Customer'] + emails.columns[1:].tolist()

df = df.merge(emails, on='Customer')
print (df)
   Customer               Address                Email
0  J. Smith  10 Sunny Rd Timbuktu  j.smith@myemail.com

与另一个答案类似的解决方案 - 可以重命名[0]选择的第一列:

df = df.merge(emails.rename(columns={emails.columns[0]:'Customer'}), on='Customer')
print (df)
   Customer               Address                Email
0  J. Smith  10 Sunny Rd Timbuktu  j.smith@myemail.com

【讨论】:

    【解决方案2】:

    您可以将您的电子邮件名称列重命名为“客户”,然后合并。这样一来,您根本不必担心会删除列。

    df.merge(emails.rename(columns={mapped_name:'Customer'}), how='inner', on='Customer')
    Out[53]: 
       Customer               Address                Email
    0  J. Smith  10 Sunny Rd Timbuktu  j.smith@myemail.com
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2015-02-03
      • 2021-07-28
      • 2019-12-15
      相关资源
      最近更新 更多