2017-05-08 6 views
3

Ich habe einen Datenrahmen wie folgt aus:Python Pandas: Überprüfen Sie, ob Zeichenfolge in einer Spalte in Zeichenfolge einer anderen Spalte in der gleichen Zeile enthalten ist

RecID| A |B 
---------------- 
1 |a | abc 
2 |b | cba 
3 |c | bca 
4 |d | bac 
5 |e | abc 

Und will eine andere Spalte, C, aus A schaffen und B für die gleiche Zeile, wenn die Zeichenfolge in Spalte A in der Zeichenfolge von Spalte B enthalten ist, dann C = True und wenn nicht, dann C = False.

Das Beispiel Ausgang ich suche, ist dies:

RecID| A |B |C 
-------------------- 
1 |a | abc |True 
2 |b | cba |True 
3 |c | bca |True 
4 |d | bac |False 
5 |e | abc |False 

Gibt es eine Möglichkeit, dies schnell in Pandas zu tun und ohne eine Schleife?

Dank

Antwort

3

Sie benötigen apply mit in:

df['C'] = df.apply(lambda x: x.A in x.B, axis=1) 
print (df) 
    RecID A B  C 
0  1 a abc True 
1  2 b cba True 
2  3 c bca True 
3  4 d bac False 
4  5 e abc False 

Eine andere Lösung mit list comprehension ist schneller, aber es hat keine NaN s sein:

df['C'] = [x[0] in x[1] for x in zip(df['A'], df['B'])] 
print (df) 
    RecID A B  C 
0  1 a abc True 
1  2 b cba True 
2  3 c bca True 
3  4 d bac False 
4  5 e abc False 
+0

Danke, das hat funktioniert! – swang16

0

ich auch über Lösung versucht, aber ich habe Fehler

TypeError: ("Argument des Typs 'float' ist nicht iterierbar", 'trat bei Index 8830 auf')

bei

lm = lambda x: x.BANK in x.BRANCH

df [ 'existiert'] = df.apply (lm, axis = 1)

BANK & -Zweig Meine Spaltennamen

Bitte antworten

Verwandte Themen