2017-10-09 11 views
1

J'ai deux séries de panda, et je voudrais simplement comparer leurs valeurs de chaîne, et retourner les chaînes (et peut-être aussi les indices) des valeurs qu'elles ont en commun, par exemple. Hannah, Frank et Ernie dans l'exemple ci-dessous ::Comparaison d'entrées de chaîne dans deux séries Pandas

print(x) 
print(y) 

0  Anne 
1  Beth 
2 Caroline 
3  David 
4  Ernie 
5  Frank 
6  George 
7  Hannah 
Name: 0, dtype: object 
1  Hannah 
2  Frank 
3  Ernie 
4   NaN 
5   NaN 
6   NaN 
7   NaN 

Faire

x == y 

jette un

ValueError: Can only compare identically-labeled Series objects 

tout comme

x.sort_index(axis=0) == y.sort_index(axis=0) 

et

x.reindex_like(y) > y 

fait quelque chose, mais pas la bonne chose!

+0

Il semble que x est plus long que y! – IanS

Répondre

1

Si besoin des valeurs communes que vous pouvez utiliser convertir la première colonne à set et utiliser intersection:

a = set(x).intersection(y) 
print (a) 
{'Hannah', 'Frank', 'Ernie'} 

Et pour les indices ont besoin merge par défaut inner join avec reset_index pour les indices de convertir des colonnes:

df = pd.merge(x.rename('a').reset_index(), y.rename('a').reset_index(), on='a') 
print (df) 
    index_x  a index_y 
0  4 Ernie  3 
1  5 Frank  2 
2  7 Hannah  1 

Détail:

print (x.rename('a').reset_index()) 
    index   a 
0  0  Anne 
1  1  Beth 
2  2 Caroline 
3  3  David 
4  4  Ernie 
5  5  Frank 
6  6 George 
7  7 Hannah 

print (y.rename('a').reset_index()) 
    index  a 
0  1 Hannah 
1  2 Frank 
2  3 Ernie 
3  4  NaN 
4  5  NaN 
5  6  NaN 
6  7  NaN 
+0

C'est exactement ce que je recherchais. Merci!! – npross