2017-10-08 3 views
2

Ich versuche zu vergleichen, ob die Werte in der Spalte 'Namen' von 'df2' Dataframe in der Spalte 'Namen' von 'df1' vorhanden sind . Ich möchte die nicht übereinstimmenden Werte in df1 ['Names'] mit der benutzerdefinierten Zeichenfolge 'Other' aktualisieren. Ich möchte nicht bearbeiten und keine Werte in anderen Spalten.Pandas: Ersetze Werte innerhalb einer bestimmten Spalte eines Datenrahmens basierend auf einer Spalte in einem anderen Datenrahmen

Kann mir bitte jemand helfen, das erwartete Ergebnis zu erhalten?

df1 
    Names  Method 
0 Ram  GET 
1 Sham  POST 
2 Ganesh READ 
3 Ramesh GET 
4 Deepak POST 

df2 
    Names 
0 Sham 
1 Ram 

Erwartetes Ergebnis von df1:

df1 
    Names  Method 
0 Ram  GET 
1 Sham  POST 
2 Other  READ 
3 Other  GET 
4 Other  POST 
+1

Would Diese Arbeit: 'df1.loc [~ df1 ['Namen']. isin (df2 ['Namen']), 'Namen'] = 'Andere''? – stephan

+0

Es funktioniert .. Sie sind Awesome !! –

+1

@stephan, würde es Ihnen etwas ausmachen, aus Ihrem Kommentar eine Antwort zu machen - damit die Frage nicht unbeantwortet bleibt? – MaxU

Antwort

2

Sie isin verwenden können, ob das überprüfen Werte einer Reihe oder eines Rahmens sind in einer anderen. Um ein „nicht, ist in“, zunichte machen einfach das Ergebnis mit ~:

>>> ~df1['Names'].isin(df2['Names']) 
0  False 
1  False 
2  True 
3  True 
4  True 

Sie können dann das Ergebnis zu select verwenden die Werte zu ändern, und diese durch Zuordnung zu ändern:

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 

HINWEIS: @stephan's method ist mehr idiomatische und höchstwahrscheinlich wird es schneller

als auch sein
Verwandte Themen