comment comparer deux variables de chaîne dans les pandas?

J'ai deux colonnes de la chaîne dans mes Pandas dataset

name1     name2
John Doe  John Doe
AleX T    Franz K

et j'ai besoin de vérifier si name1 est égal à name2.
Le naïf façon, j'utilise maintenant est d'utiliser un simple masque de

mask=df.name1==df.name2

Mais le problème est qu'il y a peut être tort de cordes (d'une manière qui n'est pas prévisible - les données sont trop gros) qui empêchent une correspondance exacte à se produire.

Par exemple "John Doe" et "John Doe" ne correspondent pas. Bien sûr, j'ai coupé, écrit en minuscule mes cordes, mais d'autres possibilités.

Une idée serait de regarder si name1 est contenue dans name2. Mais il semble que je ne peut pas utiliser str.contains avec une autre variable comme argument. D'autres idées?

Merci beaucoup!

EDIT: à l'aide de isin permet aux non-sensiques résultats.
Exemple

test = pd.DataFrame({'A': ["john doe", " john doe", 'John'], 'B': [' john doe', 'eddie murphy', 'batman']})

test
Out[6]: 
           A             B
0   john doe      john doe
1   john doe  eddie murphy
2       John        batman

test['A'].isin(test['B'])
Out[7]: 
0    False
1     True
2    False
Name: A, dtype: bool
Salut @edchum ce n'est pas un doublon de la question que vous mentionnez.
Alors, êtes-vous après quelque chose comme df['name1'].str.lower() == df['name2'].str.lower()?
pas vraiment, parce que je crois que l'égalité parfaite générer trop de faux négatifs dans les données. vérifier si nom1 figure quelque part dans nom2 semble plus approprié
Je pense que dans ce cas, vous devez strip les espaces et lower le cas, voir ma réponse
Si vous avez proposé d'utiliser quelque chose comme in alors que vous avez à faire cela à l'aide de apply comme df.apply(lambda x: x['A'].strip().lower() in x['B'].strip().lower(), axis=1)

OriginalL'auteur | 2016-03-11