我有两个数据集如下:
name Longitude Latitude continent
0 Aruba -69.982677 12.520880 North America
1 Afghanistan 66.004734 33.835231 Asia
2 Angola 17.537368 -12.293361 Africa
3 Anguilla -63.064989 18.223959 North America
4 Albania 20.049834 41.142450 Europe
另一个数据集如下:
^{pr2}$在这里,列name
和COUNTRY
包含国家名称,但顺序不同。在
如何将第二个数据帧合并为第一个数据帧,并将CODE
列添加到第一个数据帧中。在
所需输出:
name Longitude Latitude continent CODE
0 Aruba -69.982677 12.520880 North America NaN
1 Afghanistan 66.004734 33.835231 Asia AFG
2 Angola 17.537368 -12.293361 Africa NaN
3 Anguilla -63.064989 18.223959 North America NaN
4 Albania 20.049834 41.142450 Europe ALB
尝试:
import numpy as np
import pandas as pd
df = pd.DataFrame({'name' : ['Aruba', 'Afghanistan', 'Angola', 'Anguilla', 'Albania'],
'Longitude' : [-69.982677, 66.004734, 17.537368, -63.064989, 20.049834],
'Latitude' : [12.520880, 33.835231, '-12.293361', 18.223959, 41.142450],
'continent' : ['North America','Asia','Africa','North America','Europe'] })
print(df)
df2 = pd.DataFrame({'COUNTRY' : ['Afghanistan', 'Albania', 'Algeria', 'American Samoa', 'Andorra'],
'GDP (BILLIONS)' : [21.71, 13.40, 227.80, 0.75, 4.80],
'CODE' : ['AFG', 'ALB', 'DZA', 'ASM', 'AND']})
print(df2)
pd.merge(left=df, right=df2,left_on='name',right_on='COUNTRY')
# but this fails
熊猫有pd合并[https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html]函数,默认情况下使用内部联接。如果两个数据帧中要合并的键不同,内部联接基本上只接受在
on
或left_on
和right_on
中指定的两个键中都存在的值。在由于需要添加
CODE
值,因此可以使用以下代码行:pd.merge(left=df, right=df2[['COUNTRY', 'CODE']], left_on='name', right_on='COUNTRY', how='left')
这将产生以下输出:
以下也给出了相同的结果:
^{pr2}$new_df = pd.merge(left=df1[['COUNTRY', 'CODE']], right=df, left_on='COUNTRY', right_on='name', how='right')
默认情况下,^{} 使用
how='inner'
,它使用两个数据帧之间的键的交集。在这里,您需要how='left'
来仅使用left
数据帧中的键:默认情况下,合并执行“内部”合并或联接,只保留左右两侧都匹配的记录。您需要一个“outer”联接,保留所有记录(也有“left”或“right”)。在
示例:
相关问题 更多 >
编程相关推荐