Comment imprimer un object groupby

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.