2017-10-08 4 views
0

Je possède ce jeu de données appelé 'événement'Pandas groupby somme change la clé, pourquoi?

id event_type_1 event_type_2 event_type_3 
234    0    1    0 
234    1    0    0 
345    0    0    0 

et je veux produire ce

id event_type_1 event_type_2 event_type_3 
234    1    1    0 
345    0    0    0 

J'ai essayé d'utiliser

event.groupby('id').sum() 

mais que vient de produire

id event_type_1 event_type_2 event_type_3 
1    1    1    0 
2    0    0    0 

L'identifiant a été remplacé par une valeur incrémentielle commençant à '1'. Pourquoi? Et comment puis-je obtenir le résultat souhaité?

+0

pouvez-vous publier une sortie de 'print (event.columns.tolist())'? – MaxU

+0

Je ne peux pas reproduire ce comportement - pourriez-vous essayer votre code par rapport à votre échantillon de données - que produit-il? – MaxU

+0

mmmm ... cela fonctionne sur mon exemple de jeu de données ... – user1753640

Répondre

1

Utilisation as_index=False parameter:

In [163]: event.groupby('id', as_index=False).sum() 
Out[163]: 
    id event_type_1 event_type_2 event_type_3 
0 234    1    1    0 
1 345    0    0    0 

De l'docs:

as_index: booléen, défaut True

Pour la sortie agrégée, objet retour avec des étiquettes de groupe comme l'indice. Uniquement pertinent pour l'entrée DataFrame. as_index = False est effectivement sortie groupée "style SQL"

+1

Je pensais suggérer 'as_index = False' - cependant, je ne vois pas comment l'OP obtient ce qu'il dit avoir reçu l'input qu'il a donné ... Je ne peux pas le reproduire avec' id' comme une colonne ou en tant qu'indice, le résultat de l'OP ... –

+0

@JonClements, je ne suis pas sûr de comprendre ce que vous voulez dire ... Que voulez-vous dire en disant que «passer False est plus susceptible de vous donner quelque chose de nouveau»? – MaxU

+0

Bonjour MaxU, merci pour votre suggestion, mais aussi réinitialiser l'index comme Jon a souligné. Pas certain de pourquoi. – user1753640