我有关于unix时间戳中的用户事件日志的数据如下:
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列,如下所示:
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分钟)在16h10的2016-03-28上活动。也可以在2016-04-01 at 07h10通过08h12 (1小时2分钟)。
类似地,用户533815003在06h27的2016-4-05上通过07h08登录(41分钟),在2016-4-25上通过10h50登录(45分钟)。
如果我想知道用户在active).
1.13minutes (只有用户533815001是活动的,直到2016-4-02是1h-13min + 41min = 1h.54minutes.
2016-4-1,2016-4-10是1h02mins + 41mins = 1h43mins.
F 235
我该怎么做这种分析呢?
发布于 2022-07-05 19:44:16
IIUC,您可以将groupby与自定义Grouper一起使用,然后将最小项和最大项保留一天,并计算差异:
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:00https://stackoverflow.com/questions/72874239
复制相似问题