在 10 秒间隔数据中查找每小时的间隔数

Find number of gaps per hour in 10 second interval data

我的数据在 24 小时内以 10 秒为间隔组织:

2015-10-14 15:01:10 3956.58 0   19  6.21    105.99  42  59.24  
2015-10-14 15:01:20 3956.58 0   1   0.81    121.57  42  59.24  
2015-10-14 15:01:30 3956.58 0   47  8.29    115.53  42  59.24  
2015-10-14 15:01:40 3956.58 0   79  12.19   107.64  42  59.24 
..   
..   
..     
2015-10-15 13:01:10     3956.58 0   79  8.02    107.64  42  59.24   
2015-10-15 13:01:10     3956.58 0   79  7.95    108.98  42  59.24
2015-10-15 13:01:10     3956.58 0   79  7.07    110.58  42  59.24  

我想检查是否有任何每小时组的间隔超过 10 秒。我如何获得每个组的差距并打印出来?到目前为止,我有以下内容:

df = pd.read_csv('convertcsv.csv', parse_dates = True, index_col=0,
                 names=['date', 'hole_depth', 'rop', 'rotary',
                        'torque', 'hook_load', 'azimuth', 'inclin'])
df['num_gaps'] = df.groupby(df.index.date)
df.groupby(df.index.time)['num_gaps'].sum()

我希望输出为:

timestamp, num_of_gaps  
2015-10-15 06:00, 5  
2015-10-15 07:00, 0   
...

This is a great answer to get you started. 你的情况不同,因为你想先按小时分组,然后寻找大于 10 秒的差异(避免答案中提到的日期差异问题)。

所以你可以试试,假设你的 DataFrame 带有 DateTimeIndex:

import pandas as pd
df['tvalue'] = df.index
time_groups = df.groupby(pd.TimeGrouper('H'))
for hour, data in time_groups:
    data['delta'] = (data['tvalue']-data['tvalue'].shift()).fillna(0)
    data['delta_sec'] = data['delta'].apply(lambda x: x  / np.timedelta64(10,'s'))
    print(data[data.delta_sec > 10])

刚刚看到您的编辑 - 您当然也可以只计算每小时的值并检查 .count() 是否低于预期的 360。换句话说,

print(df.groupby(TimeGrouper('H')).size())