Disons que je dispose d'un journal de l'activité des utilisateurs et que je souhaite générer un rapport sur la durée totale et le nombre d'utilisateurs uniques par jour.
import numpy as np
import pandas as pd
df = pd.DataFrame({'date': ['2013-04-01','2013-04-01','2013-04-01','2013-04-02', '2013-04-02'],
'user_id': ['0001', '0001', '0002', '0002', '0002'],
'duration': [30, 15, 20, 15, 30]})
L'agrégation de la durée est assez simple :
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg
duration
date
2013-04-01 65
2013-04-02 45
Ce que j'aimerais faire, c'est additionner la durée et compter les distincts en même temps, mais je n'arrive pas à trouver un équivalent pour count_distinct :
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
Cela fonctionne, mais il y a sûrement un meilleur moyen, non ?
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg['uv'] = df.groupby('date').user_id.nunique()
agg
duration uv
date
2013-04-01 65 2
2013-04-02 45 1
Je pense que je dois simplement fournir une fonction qui renvoie le nombre d'éléments distincts d'un objet Series à la fonction aggregate, mais je n'ai pas beaucoup d'expérience des différentes bibliothèques à ma disposition. De plus, il semble que l'objet groupby connaisse déjà cette information, alors ne ferais-je pas simplement double emploi ?