Giả sử tôi có nhật ký hoạt động của người dùng và tôi muốn tạo báo cáo về tổng thời lượng và số lượng người dùng duy nhất mỗi ngày.
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]})
Thời lượng tổng hợp khá đơn giản:
group = df.groupby('date')
agg = group.aggregate({'duration': np.sum})
agg
duration
date
2013-04-01 65
2013-04-02 45
Những gì tôi muốn làm là tổng hợp thời lượng và đếm bản năng cùng một lúc, nhưng tôi dường như không thể tìm thấy một điểm tương đương cho count_distinct:
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
Điều này hoạt động, nhưng chắc chắn có một cách tốt hơn, không?
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
Tôi nghĩ rằng tôi chỉ cần cung cấp một hàm trả về số lượng các mục riêng biệt của một đối tượng Dòng cho hàm tổng hợp, nhưng tôi không có nhiều khả năng tiếp xúc với các thư viện khác nhau theo ý của mình. Ngoài ra, có vẻ như đối tượng theo nhóm đã biết thông tin này, vì vậy tôi sẽ không cố gắng sao chép?