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.
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
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')],
)
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