Il y a un argument «indicateur» lors de la fusion avec des pandas, mais bien que ce soit très pratique, je pense que peu de gens l'utilisent, c'est donc un article dans le but de se répandre.
La Documentation indique ce qui suit.
indicator : bool or str, default False If True, adds a column to output DataFrame called “_merge” with information on the source of each row. If string, column with information on source of each row will be added to output DataFrame, and column will be named value of string. Information column is Categorical-type and takes on a value of “left_only” for observations whose merge key only appears in ‘left’ DataFrame, “right_only” for observations whose merge key only appears in ‘right’ DataFrame, and “both” if the observation’s merge key is found in both.
En règle générale, si vous rejoignez à gauche, tous les enregistrements qui n'existent que dans les données de gauche seront perdus au moment de la fusion. Cependant, lors de l'analyse des données, il arrive souvent que vous souhaitiez voir comment les enregistrements sont liés et quels enregistrements ne sont pas liés. Si vous fusionnez normalement, il sera assez difficile de vérifier cela, ou plus tard vous remarquerez que ce n'est pas du tout lié et que ce sera un désastre, mais si vous utilisez l'indicator présenté dans cet article, vous pouvez facilement le vérifier. Je vais.
Il n'y a pas de problème particulier si la cible à analyser est uniquement des données internes et que toutes les données sont complètement liées à la clé, mais cela est utile pour extraire des données inconnues de l'extérieur et les relier aux propres données de l'entreprise. Faire.
Prenons un exemple concret.
Supposons que vous souhaitiez associer les données de poids b que vous avez prélevées de l'extérieur aux données de hauteur a dont vous disposez.
a = pd.DataFrame({
"ID" : [1, 2, 3, 4, 6],
"name": ["Tom", "Bob", "Alex", "Mike", "John"],
"heigt": [169, 173, 163, 170, 182]
})
b = pd.DataFrame({
"ID" : [1, 2, 3, 4, 5],
"weight": [65, 70, 72, 58, 61]
})
a
b
Si vous voulez analyser sans réfléchir
c = a.merge(b, on="ID", how="left")
# or
c = a.merge(b, on="ID", how="inner")
Je pense que vous devriez le faire selon votre objectif.
Ici, b sont les données apportées de l'extérieur, nous voulons donc savoir ce qui suit.
―― Dans quelle mesure a et b sont-ils liés? --Je veux voir les détails de l'enregistrement où a (b) ne colle pas
Vous pouvez facilement vérifier cela avec l'option ʻindicator. C'est facile à utiliser, il suffit d'ajouter ʻindicator = True
comme indiqué ci-dessous.
(La vérification en double de la clé de jointure n'est pas mentionnée ici)
c = a.merge(b, on="ID", how="outer", indicator=True)
c
Ensuite, la colonne _merge
sera ajoutée avec l'ensemble de données fusionné comme ci-dessus.
La colonne «_merge» contient l'une des valeurs «both», «left_only» ou «right_only», qui vous indique d'où vient l'enregistrement. Après cela, utilisez cette colonne
c_left_only = c[c["_merge"]=="left_only"]
c_left_only
Ensuite, vous pouvez obtenir une liste de personnes qui sont grandes mais pas de poids.
Il est pratique de définir how = "external" lors de la fusion, puis d'extraire les données avec la valeur "_merge" en fonction de l'objectif.
De plus, ʻindicator` supporte non seulement le type bool mais aussi le type str.
d = a.merge(b, on="ID", how="outer", indicator="flg_weight")
d
La partie `_merge` peut être la chaîne spécifiée.
C'est une fonction pratique, alors veuillez l'utiliser! Ayons une bonne vie d'analyse des données ~~
Recommended Posts