Angenommen, ich habe ein Protokoll der Benutzeraktivität und ich möchte einen Bericht über die Gesamtdauer und die Anzahl der einzelnen Benutzer pro Tag generieren.Pandas Aggregat Anzahl ausgeprägt
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]})
Dauer Aggregieren ist ziemlich einfach:
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg
duration
date
2013-04-01 65
2013-04-02 45
Was ich möchte Summe zu tun ist, die Dauer und zählen distincts zur gleichen Zeit, aber ich kann nicht scheinen, ein Äquivalent für finden count_distinct:
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
Das funktioniert, aber es gibt einen besseren Weg, nein?
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 brauche zu schaffen, nur eine Funktion, die die Anzahl der verschiedenen Elemente einer Serie Objekt auf die Aggregatfunktion zurückgibt, aber ich weiß nicht vielen Kontakt mit den verschiedenen Bibliotheken an meinem Verfügung. Es scheint auch, dass das groupby Objekt diese Information bereits kennt, also würde ich nicht einfach Aufwand duplizieren?
Das ist es. pd.Series.nunique ist, was ich nicht finden konnte, gut, konnte nicht richtig arbeiten. Ziemlich offensichtlich im Nachhinein. Vielen Dank! – dave
Diese Antwort ist veraltet. Sie können jetzt 'nunique' direkt verwenden. Siehe @Blodwyn Pigs Lösung unter –