Powiedzmy, że mam dziennik aktywności użytkowników i chcę wygenerować raport o łącznym czasie trwania i liczbie unikalnych użytkowników dziennie.
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]})
Sumowanie czasu trwania jest dość proste:
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg
duration
date
2013-04-01 65
2013-04-02 45
Chciałbym jednocześnie zsumować czas trwania i liczyć różne elementy, ale nie mogę znaleźć odpowiednika dla count_distinct:
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
To działa, ale na pewno jest lepszy sposób, prawda?
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
Myślę, że po prostu muszę zapewnić funkcję, która zwraca liczbę różnych elementów obiektu Series do funkcji agregującej, ale nie mam do dyspozycji wielu bibliotek. Wydaje się również, że obiekt groupby już zna te informacje, więc czy nie powtórzyłbym tego po prostu?