Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫合并两个数据帧而不复制列_Python_Pandas - Fatal编程技术网

Python 熊猫合并两个数据帧而不复制列

Python 熊猫合并两个数据帧而不复制列,python,pandas,Python,Pandas,我的问题与类似,但我无法找到以下具体示例的解决方案 我有日期框df: Customer Address J. Smith 10 Sunny Rd Timbuktu 和数据帧电子邮件: Name Email J. Smith j.smith@myemail.com 我想合并两个数据帧以生成: Customer Address Email J. Smith 10 Sunny Rd Timbuktu j.smith@

我的问题与类似,但我无法找到以下具体示例的解决方案

我有日期框df:

Customer    Address
J. Smith    10 Sunny Rd Timbuktu
和数据帧电子邮件:

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可能是“Customer”,在这种情况下,我不想同时删除这两个Customer列


有什么想法吗?

我想您可以将
电子邮件中的第一列重命名为
Customer
how='interner'
,因为默认值:

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

您只需将“电子邮件名称”列重命名为“客户”,然后合并即可。这样,您根本不需要担心删除列

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

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