我试图比较是否'df2'数据帧的'名称'列中的值出现在'df1'的'名称'列中。我想用自定义字符串'Other'更新df1 ['Names']中的不匹配值。我不想编辑其他列中的任何值。
有人可以帮助我获得预期的结果吗?
df1
Names Method
0 Ram GET
1 Sham POST
2 Ganesh READ
3 Ramesh GET
4 Deepak POST
df2
Names
0 Sham
1 Ram
df1的预期结果:
df1
Names Method
0 Ram GET
1 Sham POST
2 Other READ
3 Other GET
4 Other POST
答案 0 :(得分:3)
您可以使用isin
检查一个系列或框架的值是否在另一个系列或框架中。要获得"不在",只需使用~
否定结果:
>>> ~df1['Names'].isin(df2['Names'])
0 False
1 False
2 True
3 True
4 True
然后,您可以将结果用于select要更改的值,并通过分配更改这些值:
df1.loc[~df1['Names'].isin(df2['Names']), 'Names'] = 'Other'
答案 1 :(得分:1)
In [39]: df1.loc[df1.query("Names not in @df2.Names").index, 'Names'] = 'Other'
In [40]: df1
Out[40]:
Names Method
0 Ram GET
1 Sham POST
2 Other READ
3 Other GET
4 Other POST
注意:@stephan's method更惯用,而且很可能它也会更快