如果日期时间列值具有特定间隔,则获取行数

Getting the number rows if the datetime colum value is with a certain interval

我的 start-date 值为 2015-01-13 12:00,end-date 值为 2015-01-16 12:00,这是 4 天区间。我想获得学生在此间隔的每一天中有 activity 的天数。例如给定这个数据框(请考虑也有重复项):

userid  |  activityday
111        2015-01-13 12:00
111        2015-01-13 12:00
111        2015-01-14 12:00
222        2015-01-13 12:00
222        2015-01-14 12:00
222        2015-01-15 12:00
333        2015-01-13 12:00
333        2015-01-14 12:00
333        2015-01-15 12:00
333        2015-01-15 12:00
333        2015-01-16 12:00

我要获取:

userid |  days_active
111    |  2
222    |  3
333    |  4

我可以使用循环来完成此操作,但需要很长时间。请问有没有什么方便的方法可以实现?

df.activityday.dt.date.groupby(df.userid).nunique()

userid
111    2
222    3
333    4
Name: activityday, dtype: int64

发生了什么

  • 您可以通过 dt 访问器访问许多 datetime 相关的向量化函数。 dt.date 只是 returns datetime 值的 date 部分。这是我们关心的关于一天内活动数量的部分。
  • 然后我 groupby 'useid' 并使用 nunique 函数(编号唯一)和中提琴。

您可以添加一小部分格式以获得您所要求的内容。即reset_index

df.activityday.dt.date.groupby(
    df.userid
).nunique().reset_index(name='days_active')

   userid  days_active
0     111            2
1     222            3
2     333            4