2017-10-08 141 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是更地道,最可能它會更快以及

相關問題