Pandas:根据其他数据帧中的列替换一个数据帧的特定列中的值

时间:2017-10-08 09:05:56

标签: python pandas dataframe ipython

我试图比较是否'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

2 个答案:

答案 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更惯用,而且很可能它也会更快