Misalkan saya memiliki log aktivitas pengguna dan saya ingin membuat laporan tentang durasi total dan jumlah pengguna unik per hari.
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]})
Durasi penggabungan cukup mudah:
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg
duration
date
2013-04-01 65
2013-04-02 45
Yang ingin saya lakukan adalah menjumlahkan durasi dan menghitung perbedaan pada saat yang sama, tetapi sepertinya saya tidak dapat menemukan padanan untuk count_distinct:
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
Ini berhasil, tapi pasti ada cara yang lebih baik, bukan?
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
Saya berpikir saya hanya perlu menyediakan fungsi yang mengembalikan jumlah item berbeda dari objek Seri ke fungsi agregat, tetapi saya tidak memiliki banyak eksposur ke berbagai perpustakaan yang saya miliki. Juga, tampaknya objek groupby sudah mengetahui informasi ini, jadi bukankah saya hanya akan menduplikasi usaha?