繁体   English   中英

如何将数据分组到 5 分钟的用户 bin 中并随后计算记录?

[英]How do I group the data into 5min user bins and subsequently count the records?

所以我有一个包含时间戳的数据框:

new_date            id  
-------------------  ----  
2021-03-22 00:12:29 164616
2021-03-22 00:11:51 297284
2021-03-22 00:11:19 148817
2021-03-22 00:11:19 139208
2021-03-22 00:10:29 301459
2021-03-22 00:09:48 299543
2021-03-22 00:09:12 302444

我想将垃圾箱分成 5 分钟的间隔,并将适合垃圾箱的活动用户的 ID 数加在一起。

new_date            id  
-------------------  ----  
2021-03-22 00:20:00 0
2021-03-22 00:15:00 13
2021-03-22 00:10:00 5
2021-03-22 00:05:00 2

到目前为止我已经尝试过

date["new_dates"] = pd.to_datetime(date['\tgp:last_session_date'], errors='coerce')
date = date.drop('\tgp:last_session_date', 1)
date.dropna()
df.groupby(pd.Grouper(key ="new_dates", freq = '5Min')).agg({"\tuser_id": "count"})

但它给出了一个奇怪的 output 与不同的日期.....

2021-02-24 18:45:00 1
2021-02-24 18:50:00 0
2021-02-24 18:55:00 0
2021-02-24 19:00:00 0
2021-02-24 19:05:00 0

我认为输出是预期的,如果在2021-02-24 18:45:00附近有一些'lost'日期时间。

您可以对原始数据进行排序以查看它:

df = df.sort_values('new_date')

因此,此行计数为1 ,下一个值为0 ,因为数据中不存在此日期时间(并且输出是连续的 DatetimeIndex)

编辑:

如果需要删除 NaN,则必须返回DataFrame.dropna的输出,否则不起作用(或使用替代方法):

date["new_dates"] = pd.to_datetime(date['\tgp:last_session_date'], errors='coerce')
date = date.drop('\tgp:last_session_date', 1)
date = date.dropna()
#alternative
#date.dropna(inplace=True)

df = df.sort_values('new_date')
print (df)
df.groupby(pd.Grouper(key ="new_dates", freq = '5Min')).agg({"\tuser_id": "count"})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM