pandas用单独的df中定义的映射替换df中的项目

时间:2018-02-03 00:30:24

标签: python pandas

我们说我有以下两个DataFrame:

df1 = pd.DataFrame({'id': [1, 2, 3], 'name': ['Johnny', 'Sara', 'Mike']})
df2 = pd.DataFrame({'name': [2, 1, 2]})

如何从df2中定义的映射更新df1

df2 = pd.DataFrame({'name': ['Sara', 'Johnny', 'Sara']})

我已经完成了以下操作,但必须有更好的方法:

id_to_name = {i: name for i, name in zip(df1['id'].tolist(), df1['name'].tolist())}
df2['name'] = df2['name'].map(id_to_name)

2 个答案:

答案 0 :(得分:3)

另一种方式:-)我最近学到了

df1.set_index('id').name.get(df2.name)
Out[381]: 
id
2      Sara
1    Johnny
2      Sara
Name: name, dtype: object

答案 1 :(得分:2)

您可以将dict / map传递给df2.name.map(dict(df1.values)) (感谢piR的改进!) -

replace

或者,df2.name.replace(df1.set_index('id').name) ,但速度较慢 -

0      Sara
1    Johnny
2      Sara
Name: name, dtype: object

filteredResult = filteredResult.filter(e => e.selectedFields.includes("Red")