如果日期时间列值具有特定间隔,则获取行数
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
我的 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
只是 returnsdatetime
值的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