计算 Pandas 中的唯一广告展示次数

Counting unique ad impressions in Pandas

我正在处理一个相当大的数据框,其中包括三个主要列:

df = pd.DataFrame({
         'ad_id': [2441, 102, 133, 102, 102, 2441, 105, 301],
         'user_id': [665, 152, 12, 665, 11, 238, 665, 12],
         'view_time': ['09/12/2017 10:11', '11/12/2017 10:22', '1/12/2017 10:22', '11/12/2017 10:35', '11/12/2017 13:01', '11/12/2017 14:11', '11/12/2017 14:38', '11/12/2017 14:52'],
})

其中 view_time 似乎与 Pandas datetime.

兼容

我的目标是识别并打印 4 个具有最高独立观看次数的广告(即特定用户在 24 小时内的观看次数 window,其中在初始独立观看之后记录的观看次数不算作唯一),或者,如果做不到这一点,则获取 n 次非重复(任何给定用户的不同 view_time 值)观看次数最多的广告。

我尝试使用以下方法:

df = df.groupby(by=['ad_id'], as_index=False).agg({'user_id': pd.Series.nunique, 'view_time': pd.Series.nunique})

但这似乎对正确计算独特的观看次数或根据观看次数对 ad_id 值进行排序几乎没有帮助,无论它可能多么粗暴。

d = df.assign(
    view_time=
    pd.to_datetime(df.view_time).dt.date
).drop_duplicates()

d.groupby('ad_id').size().nlargest(4)