我正在尝试用当前数据模拟我的问题。我正在尝试使用pandas在不同的列名称(代码和数字)上合并两个数据框,并仅从df2(位置)中提取一列。我收到密钥错误或NaN。
我尝试在这里查看其他答案,从字面上复制并粘贴已编码的答案填充到我的部分中,但仍然会出现错误或NaN。
df1:
[['Name', 'Income', 'Favourite superhero', 'Code', 'Colour'],
['Joe', '80000', 'Batman', '10004', 'Red'],
['Christine', '50000', 'Superman', '10005', 'Brown'],
['Joey', '90000', 'Aquaman', '10002', 'Blue']
df2:
[['Number', 'Language', 'Location'],
['10005', 'English', 'Sudbury'],
['10002', 'French', 'Ottawa'],
['10004', 'German', 'New York']]
what I tried:
data = pd.merge(CSV1,
CSV2[['Location']],
left_on='Code',
right_on='Number',
how='left')
data = pd.merge(CSV1,
CSV2[['Location']],
left_on='Code',
right_index=True,
how='left')
I am trying to have df1 with the location column from df2 for each instance where Number
and Code are the same.
答案 0 :(得分:0)
对于这两个命令,都需要在右侧数据框中存在Number
。对于第一个命令,您需要在Number
之后放置merge
列。对于第二条命令,您需要在正确切片的数据帧上set_index
,而无需删除Number
。我相应地修改了您的命令:
CSV1.merge(CSV2[['Number', 'Location']], left_on='Code', right_on='Number', how='left').drop('Number', 1)
或
CSV1.merge(CSV2[['Number', 'Location']].set_index('Number'), left_on='Code', right_index=True, how='left')
Out[892]:
Name Income Favourite superhero Code Colour Location
0 Joe 80000 Batman 10004 Red New York
1 Christine 50000 Superman 10005 Brown Sudbury
2 Joey 90000 Aquaman 10002 Blue Ottawa