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)
A B
0 one 0
1 one 1
2 two 2
3 three 3
4 three 4
5 one 5
Lors de l'impression après regroupement par 'A', j'ai les éléments suivants:
print(df.groupby('A'))
<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>
Comment puis-je imprimer le dataframe groupé?
Si je fais:
print(df.groupby('A').head())
J'obtiens le dataframe comme s'il n'était pas groupé:
A B
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:
A B
A
one 0 one 0
1 one 1
5 one 5
two 2 two 2
three 3 three 3
4 three 4
print df.groupby('A').head()
. quelle version de pandas avez-vous?df.groupby(['A', 'B']).sum()
, mais il échouerait si les('A', 'B')
paires ne sont pas uniques.Réponses:
Faites simplement:
Cela fonctionne également,
Pour le regroupement sélectif de touches: insérez les clés de votre choix dans le
key_list_from_gb
, dans ce qui suit, en utilisantgb.keys()
: Par exemple,la source
for A in d['A'].unique(): print(A, df.query(f'A == "{A}"'))
key_list_from_gb
?Si vous cherchez simplement un moyen de l'afficher, vous pouvez utiliser describe ():
Cela vous donne une table soignée.
la source
J'ai confirmé que le comportement des
head()
changements 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 trié par groupe. La
.head()
méthode est un peu trompeuse ici - c'est juste une fonctionnalité pratique pour vous permettre de réexaminer l'objet (dans ce cas,df
) que vous avez groupé. Le résultatgroupby
est une sorte d'objet distinct, unGroupBy
objet. Vous devezapply
,transform
oufilter
pour revenir à un DataFrame ou à une série.Si tout ce que vous vouliez faire était de trier par les valeurs des colonnes A, vous devriez utiliser
df.sort('A')
.la source
head
fait,head(5)
il montre les 5 premières lignes, plus correct pour «montrer» le cadredf.groupby('A').apply(lambda x: x)
, ce qui est effectivement un passthru. Je suppose que vous pourriez avoir unepass()
méthode, peut-être.Une autre alternative simple:
la source
En outre, une autre alternative simple pourrait être:
la source
En plus des réponses précédentes:
Prenant votre exemple,
Puis simple code 1 ligne
la source
Merci à Surya pour ses bonnes idées. Je nettoierais sa solution et ferais simplement:
la source
Liste d'appels () sur l'objet GroupBy
vous donne:
la source
vous ne pouvez pas voir les données groupBy directement par l'instruction d'impression mais vous pouvez voir en itérant sur le groupe en utilisant la boucle for essayez ce code pour voir le groupe par données
vous obtiendrez une sortie après avoir essayé ceci comme résultat groupby
J'espère que ça aide
la source
Dans Jupyter Notebook, si vous procédez comme suit, il imprime une jolie version groupée de l'objet. La
apply
méthode aide à créer une trame de données multi-index.Production:
Si vous voulez que la
by
ou les colonnes n'apparaissent pas dans la sortie, déposez simplement la ou les colonnes, comme ceci.Production:
Ici, je ne suis pas sûr de savoir pourquoi
.iloc[:]
ne fonctionne pas au lieu de[:]
la fin. Donc, s'il y a des problèmes à l'avenir en raison de mises à jour (ou actuellement),.iloc[:len(a)]
fonctionne également.la source
J'ai trouvé un moyen délicat, juste pour le brainstorming, voir le code:
le résultat:
Les avantages sont si faciles à imprimer, car ils renvoient une trame de données au lieu de Groupby Object. Et la sortie est belle. Alors que le contre est qu'il crée une série de données redondantes.
la source
En python 3
De manière plus interactive
la source
pour imprimer toutes (ou arbitrairement plusieurs) lignes du df groupé:
la source