【问题标题】:Resampling Event DataFrame to 10 mints interval and counting events将 Event DataFrame 重采样为 10 分钟间隔并计数事件
【发布时间】:2018-12-17 20:16:20
【问题描述】:

我有一个 pandas 数据框,其中显示了有关正在发生的某些事件的一些信息。基本都是这样的

Timestamp   Event Code  Prev Event Code State
2018-01-01T06:45:04.691 0   138 1
2018-01-01T06:44:33.678 138 0   21
2017-12-31T06:32:06.691 0   138 21
2017-12-31T06:31:39.687 138 0   21
2017-12-30T06:19:20.688 0   138 1

我想重新采样此数据帧,以使时间戳以 10 分钟为间隔,并且在该 10 分钟间隔内发生的事件计数。我想要这样的东西作为输出

Timestamp   0_count 138_count
fifth 10 min    2   2
fourth 10 min   3   0
third 10 min    5   0
second 10 min   1   1
first 10 min    0   2

我刚刚给出了一个占位符时间戳,而不是Timestamp 列中的实际输出。实际上应该存在 10 mint 分隔的时间戳。

我不知道如何解决这个问题。我认为必须有一些有效的方法可用,而不是在Pandas 中使用一些复杂的循环和代码。

为了重新生成示例数据帧,可以使用此代码。

event_df = pd.DataFrame()

event_df['Timestamp'] = ['2018-01-01T06:45:04.691', '2018-01-01T06:44:33.678',
       '2017-12-31T06:32:06.691', '2017-12-31T06:31:39.687',
       '2017-12-30T06:19:20.688']
event_df['Event Code'] = [  0, 138,   0, 138,   0]
event_df['Prev Event Code'] = [138,   0, 138,   0, 138]
event_df['State'] = [ 1, 21, 21, 21,  1]

【问题讨论】:

    标签: python pandas dataframe timestamp python-datetime


    【解决方案1】:

    将时间戳设置为数据帧索引:

    event_df.index = pd.to_datetime(event_df.Timestamp)
    

    现在,您可以重新采样:

    count_138 = (event_df['Event Code']==138).astype(int)\
                                             .resample('10 min').sum()
    count_0 = (event_df['Event Code']==0).astype(int)\
                                         .resample('10 min').sum()
    

    如果需要,还可以合并结果:

    pd.DataFrame({'count_0': count_0, 'count_138': count_138})
    

    【讨论】:

    • 成功了。谢谢。顺便说一句,手动检查结果是一项繁琐的任务
    猜你喜欢
    • 2021-12-02
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2014-01-15
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多