首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算用户在日期范围内登录的总时数

计算用户在日期范围内登录的总时数
EN

Stack Overflow用户
提问于 2022-07-05 18:50:57
回答 1查看 49关注 0票数 1

我有关于unix时间戳中的用户事件日志的数据如下:

代码语言:javascript
复制
data = {'id': [533815001,533815001,533815001,533815001,533815001,533815001,
              533815003,533815003,533815003,533815003,533815003,533815003],
 'start_time': [1459181400, 1459182480, 1459185780,1459494634,1459496914,1459498354,
                1459837648, 1459838908, 1459840108,1461578728,1461579508,1461581428,]
}

df = pd.DataFrame(data)
df

        id      start_time
0   533815001   1459181400
1   533815001   1459182480
2   533815001   1459185780
3   533815001   1459494634
4   533815001   1459496914
5   533815001   1459498354
6   533815003   1459837648
7   533815003   1459838908
8   533815003   1459840108
9   533815003   1461578728
10  533815003   1461579508
11  533815003   1461581428

我想知道用户在一个日期范围内活动的总小时数。因此,我从start_time中添加了start_time列,如下所示:

代码语言:javascript
复制
df['date'] = pd.to_datetime(df.start_time, unit='s')
df
id  start_time  date
0   533815001   1459181400  2016-03-28 16:10:00
1   533815001   1459182480  2016-03-28 16:28:00
2   533815001   1459185780  2016-03-28 17:23:00
3   533815001   1459494634  2016-04-01 07:10:34
4   533815001   1459496914  2016-04-01 07:48:34
5   533815001   1459498354  2016-04-01 08:12:34
6   533815003   1459837648  2016-04-05 06:27:28
7   533815003   1459838908  2016-04-05 06:48:28
8   533815003   1459840108  2016-04-05 07:08:28
9   533815003   1461578728  2016-04-25 10:05:28
10  533815003   1461579508  2016-04-25 10:18:28
11  533815003   1461581428  2016-04-25 10:50:28

可以看到,用户533815001通过17h23 (1小时13分钟)在16h102016-03-28上活动。也可以在2016-04-01 at 07h10通过08h12 (1小时2分钟)。

类似地,用户53381500306h272016-4-05上通过07h08登录(41分钟),在2016-4-25上通过10h50登录(45分钟)。

如果我想知道用户在active).

  • Total之前花费了多少小时,那就是1.13minutes (只有用户533815001是活动的,直到2016-4-021h-13min + 41min = 1h.54minutes.

  • Between 2016-4-12016-4-101h02mins + 41mins = 1h43mins.

  • and等等…

F 235

我该怎么做这种分析呢?

EN

回答 1

Stack Overflow用户

发布于 2022-07-05 19:44:16

IIUC,您可以将groupby与自定义Grouper一起使用,然后将最小项和最大项保留一天,并计算差异:

代码语言:javascript
复制
out = (df.groupby(['id', pd.Grouper(freq='D', key='date')])['date']
         .agg(['min', 'max']).diff(axis=1)['max']
         .rename('active_time').reset_index())
print(out)

# Output
          id       date     active_time
0  533815001 2016-03-28 0 days 01:13:00
1  533815001 2016-04-01 0 days 01:02:00
2  533815003 2016-04-05 0 days 00:41:00
3  533815003 2016-04-25 0 days 00:45:00
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72874239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档