我有麻烦试图找出这个问题。
我有两个数据集,dataset_1和dataset_2。我正在尝试通过匹配数据集_1和数据集_2中的“ id”在数据集_1中创建一个名为“名称”的新列。本质上映射的名称及其相应的标识。
每个数据帧中还有大约10个其他列,但对于此问题不是必需的。
在数据集的柱的实例:
Dataset_1:
id:
1234
3267
12
1234
15
数据集_2:
id: name:
12 jimbo
899 jim
3267 jimmy
1234 jimbob
899 jim
结果数据框:
Dataset_1:
id: name:
1234 jimbob
3267 jimmy
12 jimbo
1234 jimbo
15 jahad
(假设名称15 - “jahad” 是Dataset_2进一步向下)
非常感谢您的帮助。
答案 0 :(得分:1)
您可以根据df2
中的两列创建一个字典,并使用map
来df1
中的值:
print(df1)
id
0 1234
1 3267
2 12
3 1234
4 15
print(df2)
id name
0 12 jimbo
1 899 jim
2 3267 jimmy
3 1234 jimbob
4 899 jim
mapper = dict(zip(df2.id, df2.name))
# {12: 'jimbo', 899: 'jim', 3267: 'jimmy', 1234: 'jimbob'}
df1.loc[:,'name'] = df1.id.map(mapper)
id name
0 1234 jimbob
1 3267 jimmy
2 12 jimbo
3 1234 jimbob
4 15 NaN
答案 1 :(得分:0)
您可以在一行代码中执行左连接(pd.merge):
import pandas as pd
df1 = pd.DataFrame({'id': [1234, 3267, 12, 1234, 15]})
df2 = pd.DataFrame({
'id': [12, 899, 3267, 1234, 899, 15],
'name': ['jimbo', 'jim', 'jimmy', 'jimbob', 'jim', 'jahad']
})
df = df1.merge(df2, on='id', how='left')
print(df)
结果: