Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将事件数据帧重新采样为10分钟间隔并计数事件_Python_Pandas_Dataframe_Timestamp_Python Datetime - Fatal编程技术网

Python 将事件数据帧重新采样为10分钟间隔并计数事件

Python 将事件数据帧重新采样为10分钟间隔并计数事件,python,pandas,dataframe,timestamp,python-datetime,Python,Pandas,Dataframe,Timestamp,Python Datetime,我有一个熊猫数据框,它显示了一些正在发生的事件的信息。这是一个很好的称呼 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

我有一个熊猫数据框,它显示了一些正在发生的事件的信息。这是一个很好的称呼

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分钟的时间戳

我不知道如何处理这个问题。我认为在
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]

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

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})

成功了。谢谢手动检查结果是一项乏味的任务