4
votes

Compter le nombre d'occurrences par an dans un groupby

J'ai un dataframe pandas qui ressemble à:

           count_in_year
id   year               
1234 2017              2
     2018              2

Et je dois compter combien de fois count_to_today se produit chaque année par id code>. c'est-à-dire que j'ai un compte courant depuis le début des temps, et Je veux compter le nombre de fois qu'il augmente par an.

df = pd.DataFrame(data={'id':[1234, 1234, 1234, 1234, 1234], 'year':['2017', '2017', '2018', '2018', '2018'], 'count_to_today':[1, 2, 3, 3, 4]})
df
     id  year  count_to_today
0  1234  2017               1
1  1234  2017               2
2  1234  2018               3
3  1234  2018               3
4  1234  2018               4

I ' Je suis un peu confus sur la façon de faire cela. Je sais que je dois grouper par id et année , mais je ne sais pas comment obtenir .count () ou .value_counts () pour me donner les chiffres par an.


1 commentaires

Les gars, "Je veux compter le nombre de fois qu'il augmente par an."


3 Réponses :


2
votes

Vous pouvez utiliser diff et groupby:

(df.count_to_today.diff()
   .ne(0)
   .groupby([df.id, df.year])
   .sum()
   .astype(int)
   .reset_index())

     id  year  count_to_today
0  1234  2017               2
1  1234  2018               2

df.count_to_today.diff().ne(0).groupby([df.id, df.year]).sum()

id    year
1234  2017    2.0
      2018    2.0
Name: count_to_today, dtype: float64


0 commentaires

3
votes

Si vous souhaitez compter les ID par an essayez d'utiliser -

df[['ID','Year']].groupby('Year').agg('count')

ou-

df[['ID','Year']].groupby('Year').count()

Modifiez les variables comme vous voulez obtenir votre résultat.


1 commentaires

Cela ne répond pas à la partie de la question qui demande "Je veux compter le nombre de fois que cela augmente par an." ...



0
votes

Utilisez cette structure:

df[['ID','Year']].groupby('Year').agg('count')

et

df[['ID','Year']].groupby('Year').count()

J'espère que cela fonctionnera correctement.Essayez ceci

p >


0 commentaires