【发布时间】:2022-01-22 21:25:02
【问题描述】:
我想找到解决办法,
提供了一个表格,其中包含 user_id 和他们访问平台的日期, 找出连续访问时间最长的前100名用户 截至昨天的平台。
我发现这些links 解释了如何为一位用户执行此操作。但是,我不确定如何为多个用户执行此操作。
一个天真的可能是获取所有唯一用户并使用 for 循环和以上答案,获取具有最大连续访问次数的用户。但是,如果可能的话,我对矢量化方式很感兴趣。
如果需要,这些是我使用的代码,
date_series = pd.Series(np.random.randint(0,10, 400), index=pd.to_datetime(np.random.randint(0,20, 400)*1e9*24*3600), name="uid")
df = date_series.reset_index().rename({"index":"date_val"}, axis=1).drop_duplicates().reset_index(drop=True)
对于给定的用户 ID(比如 uid =1),我可以使用以下方法来查找最大连击数,
sub_df = df[df.uid==1].sort_values("date_val")
(sub_df.date_val+pd.Timedelta(days=1) != sub_df.date_val.shift(-1)).cumsum().value_counts().max()
但我不明白如何使用矢量化(不是 for 循环)方法为原始数据帧 (df) 中的所有用户做类似的事情。
【问题讨论】:
-
您应该提供一个最小的可重现数据集和匹配的预期输出。
标签: python pandas dataframe series