我的start-date
值为2015-01-13 12:00,end-date
值为2015-01-16 12:00
,这是 4天间隔。我希望得到学生在这段时间内每天活动的天数。例如,给定此数据框(请考虑也有重复项):
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
我能够使用循环执行此操作但需要很长时间。我想知道是否有方便的方法来实现这一目标?
答案 0 :(得分:4)
df.activityday.dt.date.groupby(df.userid).nunique()
userid
111 2
222 3
333 4
Name: activityday, dtype: int64
发生了什么
datetime
访问者访问许多dt
相关的矢量化函数。 dt.date
只返回date
值的datetime
部分。这是我们关注的当天活动数量的一部分。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