Python 如何在规则的时间间隔序列中对连续值进行分组?

Python 如何在规则的时间间隔序列中对连续值进行分组?,python,pandas,time-series,pandas-groupby,Python,Pandas,Time Series,Pandas Groupby,我需要单独分析包含在规则间隔时间序列中的孔之间的记录 例如,在以下时间序列中,每隔6秒定期间隔一次,00:24和00:54之间存在间隙: 2018-01-01 00:00:00 4.2 2018-01-01 00:00:06 4.1 2018-01-01 00:00:12 4.3 2018-01-01 00:00:18 3.4 2018-01-01 00:00:24 4.7 2018-01-01 00:00:54 3.3 2018-01-01 00

我需要单独分析包含在规则间隔时间序列中的孔之间的记录

例如,在以下时间序列中,每隔6秒定期间隔一次,00:24和00:54之间存在间隙:

2018-01-01 00:00:00     4.2
2018-01-01 00:00:06     4.1
2018-01-01 00:00:12     4.3
2018-01-01 00:00:18     3.4
2018-01-01 00:00:24     4.7
2018-01-01 00:00:54     3.3
2018-01-01 00:01:00     8.2
我需要分别分析以下两组:

第一组:

2018-01-01 00:00:00     4.2
2018-01-01 00:00:06     4.1
2018-01-01 00:00:12     4.3
2018-01-01 00:00:18     3.4
2018-01-01 00:00:24     4.7
第二组:

2018-01-01 00:00:54     3.3
2018-01-01 00:01:00     8.2
一个巨大的数据集中包含多个孔,分析需要比较连续的组

下面是一些代码来重现示例:

data_index=pd.DatetimeIndex(['2018-01-01 00:00:00','2018-01-01 00:00:00:00:00:00:00:00
06','2018-01-01 00:00:12','2018-01-01 00:00:18', '2018-01-01 00:00:24', '2018-01-01 00:00:54', '2018-01-01 00:01:00'])
数据=[4.2,4.1,4.3,3.4,4.7,3.3,8.2]
df=pd.DataFrame(数据索引,列=['date'])
df['datetime']=pd.to_datetime(df['date'])
df=df.set_索引('datetime')
drop(['date'],axis=1,inplace=True)
df['data']=数据

使用


细节

print(groups)

datetime
2018-01-01 00:00:00    1
2018-01-01 00:00:06    1
2018-01-01 00:00:18    1
2018-01-01 00:00:24    1
2018-01-01 00:00:54    2
2018-01-01 00:01:00    2
Name: datetime, dtype: int64

要分析不同的数据帧,可以将其保存在字典中:

dfs={i:group for i,group in df.groupby(groups)}
print(dfs[1])
                     data
datetime                 
2018-01-01 00:00:00   4.2
2018-01-01 00:00:06   4.1
2018-01-01 00:00:18   3.4
2018-01-01 00:00:24   4.7

print(dfs[2])
                     data
datetime                 
2018-01-01 00:00:54   3.3
2018-01-01 00:01:00   8.2

那么问题是什么呢?非常感谢你的回答,但是我在我的例子中犯了一个小的误导性错误。我错过了一行,我只是添加了它,因为我正在寻找任何大于采样周期的孔。您的回复仍然很完美,但是,我邀请您将timedelta比较编辑到>6秒。欢迎您!你的意思是:
groups=(df.index.to_series().diff()>=pd.Timedelta(seconds=6)).cumsum()+1
?是的,但是
groups=(df.index.to_series().diff()>pd.Timedelta(seconds=6)).cumsum()+1
否则每个步骤都是一个新的组。
dfs={i:group for i,group in df.groupby(groups)}
print(dfs[1])
                     data
datetime                 
2018-01-01 00:00:00   4.2
2018-01-01 00:00:06   4.1
2018-01-01 00:00:18   3.4
2018-01-01 00:00:24   4.7

print(dfs[2])
                     data
datetime                 
2018-01-01 00:00:54   3.3
2018-01-01 00:01:00   8.2