Comment GroupBy un Dataframe dans les Pandas et conserver les colonnes

Étant donné un dataframe qui enregistre les utilisations de certains livres comme ceci:

Name   Type   ID
Book1  ebook  1
Book2  paper  2
Book3  paper  3
Book1  ebook  1
Book2  paper  2

J'ai besoin d'obtenir le compte de tous les livres, en gardant les autres colonnes et obtenir ceci:

Name   Type   ID    Count
Book1  ebook  1     2
Book2  paper  2     2
Book3  paper  3     1

Comment cela peut-il être fait?

Merci!

32
demandé sur Meghdeep Ray 2015-07-22 20:01:02

2 réponses

Vous voulez ce qui suit:

In [20]:
df.groupby(['Name','Type','ID']).count().reset_index()

Out[20]:
    Name   Type  ID  Count
0  Book1  ebook   1      2
1  Book2  paper   2      2
2  Book3  paper   3      1

Dans votre cas, le 'Nom', 'Type' et 'ID' cols match en valeurs afin que nous puissions groupby sur ces, appel count et puis reset_index.

Une autre approche consisterait à ajouter la colonne' Count ' en utilisant transform, puis à appeler drop_duplicates:

In [25]:
df['Count'] = df.groupby(['Name'])['ID'].transform('count')
df.drop_duplicates()

Out[25]:
    Name   Type  ID  Count
0  Book1  ebook   1      2
1  Book2  paper   2      2
2  Book3  paper   3      1
33
répondu EdChum 2015-07-22 18:14:50

Je pense que as_index = False devrait faire l'affaire.

df.groupby(['Name','Type','ID'], as_index=False).count()
17
répondu jpobst 2016-06-02 22:06:18