已经为此努力了一段时间,无法解决。
在观看我们产品上的实时广播时,我有一些用户操作的日志,我需要能够获得用户观看广播的总时间的照片,减去他们暂停播放流的任何时间
我的数据框看起来像这样(经过一些过滤)
dateHourMinute event user
2 2020-05-01 14:35:00+01:00 play clqj9026
5811 2020-05-01 14:45:00+01:00 pause clqj9026 # -- exclude this
5812 2020-05-01 15:00:00+01:00 play clqj9026 # -- timedelta
5846 2020-05-01 15:01:00+01:00 play clqj9026
6147 2020-05-01 15:07:00+01:00 pause clqj9026
6148 2020-05-01 15:07:00+01:00 play clqj9026
6354 2020-05-01 15:20:00+01:00 pause clqj9026
6355 2020-05-01 15:20:00+01:00 play clqj9026
6392 2020-05-01 15:21:00+01:00 play clqj9026
6505 2020-05-01 15:23:00+01:00 pause clqj9026
6506 2020-05-01 15:23:00+01:00 stopped_watching clqj9026
我想对每对“播放/暂停”事件之间的时间增量求和,但要避免在暂停/播放事件之间包含间隔,假设用户此时流已关闭。
该示例显示了连续的事件,但是我们必须假设在某些情况下流已暂停并且用户正在执行其他操作。另外,我需要忽略顺序发生两次的同一事件的实例。我知道我可以做df.dateHourMinute.diff().sum()
,但这没有考虑到流暂停的时间段。
第二,有没有一种方法可以在不迭代user
列中的唯一值的情况下获得每个用户的总观看时间?#
编辑:更改了上表以显示暂停流的间隙。为了澄清上表的总观看时间应在33分钟后得出(请注意,在14:45的第一个“暂停”和15:00的第二个“播放”事件之间的时间段,我想排除该时间段) 。
答案 0 :(得分:2)
尝试一下:
df['dateHourMinute'] = pd.to_datetime(df['dateHourMinute'])
df = df.sort_values('dateHourMinute')
df['time_diff'] = df['dateHourMinute'].shift(-1) - df['dateHourMinute']
df = df[df['event']=='play']
print(df['time_diff'].sum())
第一行将dateHourMinute
转换为日期时间。第二行按时间对数据进行排序。第三行减去两个连续行之间的时间。现在,您在每次播放和暂停之间都有时间。现在,您可以对数据进行任何操作!最后一行添加所有time_diff
。该数据的0 days 00:48:00
让我知道是否有帮助。