82 votes

Trouver l'intersection entre deux séries dans Pandas

J'ai deux séries s1 y s2 dans pandas et souhaite calculer l'intersection, c'est-à-dire l'endroit où toutes les valeurs de la série sont communes.

Comment utiliser le concat pour ce faire ? J'ai essayé de trouver une solution mais je n'y suis pas parvenu (je ne veux pas calculer l'intersection sur les indices de s1 y s2 mais sur les valeurs).

0voto

Hyperplane Points 218

Voici une autre solution qui consiste à vérifier les inclusions de gauche et de droite

import pandas as pd

def intersect(left, right):
    left, right = pd.Series(pd.unique(left)), pd.Series(pd.unique(right))
    right = right.loc[right.isin(left)]
    left  =  left.loc[left.isin(right)]
    return pd.Series(pd.unique(left))

left = pd.Series([1,2,pd.NA, pd.NA, pd.NA], index=[*"abcde"], dtype="Int32")
right = pd.Series([pd.NA, pd.NA, 1, 3], index=[*"efgh"], dtype="Int32")
intersect(left, right)

Cela présente deux avantages majeurs :

  • Il fonctionne avec pandas Int32 et d'autres types de données nullables. Si vos colonnes contiennent des pd.NA puis np.intersect1d lance une erreur !

  • Il conserve le dtype pandas intact

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X