[PYTHON] Comment réparer les multi-colonnes générées par le groupe Pandas en les traitant en single

Aperçu

Lors de l'exécution d'un traitement groupby Pandas, en utilisant .agg () pour calculer plusieurs statistiques telles que[max, min], la trame de données retournée est multi-colonnes. Je vais vous présenter comment convertir facilement cette multi-colonne en une seule colonne.

Préparation

Créez un bloc de données 5 par 2 composé de seulement 0 et 1 comme échantillon.

input}


import numpy as np
import pandas as pd

mat = np.random.rand(5, 2)
mat[mat > 0.5] = 1
mat[mat <= 0.5] = 0
df = pd.DataFrame(mat, columns=['A', 'B'])

output}


     A    B
0  0.0  1.0
1  1.0  0.0
2  0.0  1.0
3  0.0  1.0
4  0.0  0.0

Statut

Si vous spécifiez [min, max] avec .agg (), ce sera multi-colonnes.

input}


df.groupby('A').agg({'B': [min, max]}).columns

output}


MultiIndex([('B', 'min'),
            ('B', 'max')],
           )

Solution

Préparez les variables (niveau1, niveau2 dans l'exemple suivant) comme lors de la gestion de zip dans l'instruction for, et combinez-les sous forme de chaîne de caractères à l'aide de fstring.

input}


[f'{level1}__{level2}' for level1, level2 in df.groupby('A').agg({'B': [min, max]}).columns]

output}


['B__min', 'B__max']

Recommended Posts

Comment réparer les multi-colonnes générées par le groupe Pandas en les traitant en single
Pandas: groupby () pour compléter la valeur par groupe
Dessinez un graphique en traitant avec Pandas groupby
Comment utiliser Pandas 2
Comparez comment écrire le traitement des listes par langue
Comment utiliser Pandas Rolling
Comment remplacer une méthode de type défini par l'utilisateur générée par python swig
Comment écrire sobrement avec des pandas
[Python] Comment utiliser la série Pandas
Comment séparer le code de traitement du pipeline par spider avec Scrapy
[Python] Résumé de l'utilisation des pandas
[Pandas] Qu'est-ce que set_option [Comment utiliser]
Comment réattribuer un index dans pandas dataframe
Comment lire des fichiers CSV avec Pandas
Comment utiliser les pandas Timestamp et date_range