Angenommen, ich habe ein Protokoll der Benutzeraktivität und möchte einen Bericht über die Gesamtdauer und die Anzahl der eindeutigen Benutzer pro Tag erstellen.
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]})
Die Gesamtdauer ist ziemlich einfach:
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg
duration
date
2013-04-01 65
2013-04-02 45
Ich möchte die Dauer und die Anzahl der Unterscheidungsmerkmale gleichzeitig summieren, aber ich kann anscheinend kein Äquivalent für count_distinct finden:
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
Das funktioniert, aber es gibt doch einen besseren Weg, oder?
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
Ich denke, ich muss nur eine Funktion bereitstellen, die die Anzahl der verschiedenen Elemente eines Series-Objekts an die Aggregatfunktion zurückgibt, aber ich habe nicht viel Kontakt mit den verschiedenen Bibliotheken, die mir zur Verfügung stehen. Es scheint auch, dass das groupby-Objekt diese Informationen bereits kennt. Würde ich also nicht einfach den Aufwand duplizieren?