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 tổng thời lượng và số lượng người dùng duy nhất mỗi ngày.Tổng số gấu trúc tổng hợp riêng biệt
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 gian Tập 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
sum Những gì tôi muốn làm là thời gian và đếm distincts cùng một lúc, nhưng tôi dường như không thể tìm thấy một tương đương cho count_distinct:
agg = group.aggregate({ 'duration': np.sum, 'user_id': count_distinct})
Công trình này, nhưng chắc chắn có cách tốt hơn, phải 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ĩ mình chỉ cần cung cấp hàm trả về số mục riêng biệt của đối tượng Series cho hàm tổng hợp, nhưng tôi không có nhiều hiển thị với các thư viện khác nhau vứt bỏ. Ngoài ra, có vẻ như đối tượng groupby đã biết thông tin này, vì vậy tôi sẽ không được nhân đôi nỗ lực?
Vậy là xong. pd.Series.nunique là những gì tôi không thể tìm thấy, tốt, không thể hoạt động chính xác. Khá rõ ràng trong nhận thức. Cảm ơn! – dave
Câu trả lời này đã lỗi thời. Bây giờ bạn có thể sử dụng 'nunique' trực tiếp. Xem giải pháp của @Blodwyn Pig bên dưới –