2017-10-08 140 views
2

我想比较是否'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 
+1

会这个工作:'df1.loc [〜df1 ['Names']。isin(df2 ['Names']),'Names'] ='Other''? – stephan

+0

It works ..你真棒! –

+1

@stephan,你是否介意将你的评论变成答案 - 所以问题不会得到解答? – MaxU

回答

2

您可以使用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
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是更地道,最可能它会更快以及

相关问题