【问题标题】:Sum timedeltas between specific pairs of rows in a pandas dataframe对 pandas 数据帧中特定行对之间的时间增量求和
【发布时间】:2020-08-27 14:17:12
【问题描述】:

一直在纠结这个问题,还是搞不懂。

在我们的产品上观看直播时,我有一些用户操作日志,我需要能够了解用户观看直播的总时间,减去他们暂停直播的任何时间.

我的数据框看起来像这样(经过一些过滤)

                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 的第二个“播放”事件之间的时间段,我想排除那个时间段) .

【问题讨论】:

    标签: python pandas numpy timestamp


    【解决方案1】:

    试试这个:

    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_diffs。这个数据是0 days 00:48:00

    如果有帮助,请告诉我。

    【讨论】:

    • 这是我所拥有的,但我需要排除 pauseplay 事件之间的任何时间段,例如:如果“暂停”事件之间有 5 分钟的间隔和“播放”事件,我不想将其包含在sum()
    • 你执行了代码吗? pauseplay 之间的时间为零。
    • 是的,很抱歉,在上面的示例中确实如此,但是我有很多其他格式相同的数据,其中确实包括流暂停的间隙。
    • 所以你可以简单地过滤你的数据event='play'这会很好。我正在更新答案上的代码
    • 我已经更新了这个问题,以展示一个我想要排除的时间戳之间存在差距的示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 2018-02-20
    • 2016-03-20
    • 2018-07-05
    • 2023-03-19
    相关资源
    最近更新 更多