Załóżmy, że mam dziennik aktywności użytkowników i chcę wygenerować raport o łącznym czasie trwania i liczbie unikalnych użytkowników dziennie.Liczba agregatów pand odrębna
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]})
Agregacja trwania jest dość prosta:
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg
duration
date
2013-04-01 65
2013-04-02 45
Co chciałbym zrobić, to suma czasu trwania i liczyć distincts w tym samym czasie, ale nie wydaje się znaleźć odpowiednik dla count_distinct:
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
To działa, ale na pewno jest lepszy sposób, nie?
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 wystarczy, aby zapewnić funkcję zwracającą liczbę odrębnych elementów obiektu szeregowo z funkcji zbiorczej, ale nie mam wiele ekspozycji do różnych bibliotek w moim sprzedaż. Wydaje się również, że obiekt Groupby już zna tę informację, więc czy nie powieliłbym tylko wysiłku?
To wszystko. pd.Series.nunique jest tym, czego nie mogłem znaleźć, cóż, nie mógłbym poprawnie działać. Dość oczywiste z perspektywy czasu. Dzięki! – dave
Ta odpowiedź jest nieaktualna. Możesz teraz użyć 'nunique' bezpośrednio. Zobacz rozwiązanie @Blodwyn Pig poniżej –