Je veux imprimer le résultat du regroupement avec Pandas.
J’ai un dataframe:
import pandas as pd df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)}) print(df) AB 0 one 0 1 one 1 2 two 2 3 three 3 4 three 4 5 one 5
Lors de l’impression après le regroupement par «A», j’ai les éléments suivants:
print(df.groupby('A'))
Comment imprimer le groupe de données groupé?
Si je fais:
print(df.groupby('A').head())
J’obtiens le dataframe comme s’il n’était pas groupé:
AB A one 0 one 0 1 one 1 two 2 two 2 three 3 three 3 4 three 4 one 5 one 5
Je m’attendais à quelque chose comme:
AB A one 0 one 0 1 one 1 5 one 5 two 2 two 2 three 3 three 3 4 three 4
Simplement faire:
grouped_df = df.groupby('A') for key, item in grouped_df: print(grouped_df.get_group(key), "\n\n")
Cela fonctionne aussi,
grouped_df = df.groupby('A') gb = grouped_df.groups for key, values in gb.iteritems(): print(df.ix[values], "\n\n")
Pour le regroupement sélectif des clés: Insérez les clés souhaitées dans le key_list_from_gb
, en suivant, en utilisant gb.keys()
: Par exemple,
gb = grouped_df.groups gb.keys() key_list_from_gb = [key1, key2, key3] for key, values in gb.items(): if key in key_list_from_gb: print(df.ix[values], "\n")
Si vous cherchez simplement un moyen de l’afficher, vous pouvez utiliser describe ():
grp = df.groupby['colName'] grp.describe()
Cela vous donne une table soignée.
En outre, une autre alternative simple pourrait être:
gb = df.groupby("A") gb.count() # or, gb.get_group(your_key)
J’ai confirmé que le comportement de head()
change entre la version 0.12 et 0.13. Cela ressemble à un bug pour moi. J’ai créé un problème .
Mais une opération groupby ne renvoie pas réellement un DataFrame sortingé par groupe. La méthode .head()
est un peu trompeuse ici – il s’agit simplement d’une fonctionnalité pratique pour vous permettre de réexaminer l’object (dans ce cas, df
) que vous avez groupé. Le résultat de groupby
est un type d’object distinct, un object GroupBy
. Vous devez apply
, transform
ou filter
pour revenir à un DataFrame ou à une série.
Si tout ce que vous vouliez faire était de sortinger par les valeurs des colonnes A, vous devriez utiliser df.sort('A')
.
Que diriez-vous de “lister” l’object directement?
Et puis vous pouvez le manipuler / imprimer comme une structure de données normale.