如果datetime列值具有特定间隔,则获取数字行

时间:2017-03-30 21:44:21

标签: python pandas datetime python-datetime

我的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

我能够使用循环执行此操作但需要很长时间。我想知道是否有方便的方法来实现这一目标?

1 个答案:

答案 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