我知道Pandas有一个pd.Grouper
,我们可以在其中指定时间频率。但是,它使用频率作为每个样本的边界,类似于重采样的方式。例如:
df.groupby(pd.Grouper(key='Timestamp', freq='1s')).agg({...})
我将创建一个分组的 Dataframe ,其索引间隔为1s
。但是,我希望对前一行和后一行之间的差异小于1s
的所有行进行分组。例如,我的时间戳可能是(为了简单起见,忽略日期时间,只显示秒,假设秒精度之前的日期时间相同)1.1s, 1.8s, 2.4s, 5s, 5.9s, 9s
,在这种情况下我想要(1.1s, 1.8s, and 2.4s)
,(5s, 5.9s)
、(9s)
分组在一起,并且分组的 Dataframe 的索引是(1.1s, 5s, 9s)
。
我怎样才能做到这一点?
1条答案
按热度按时间esyap4oy1#
你可以groupby cumsum on(diff〉threshold):
注意:这个问题本身就有问题,例如,如果
Timestamp
类似于pd.date_range('2023-01-01', '2023-01-02', freq='.9s')
,那么你就只有一个大组。1.创建1秒的阈值
1.创建一个新列,该列是当前时间戳和上一个时间戳之间的差值
1.创建一个新列,该列是当前时间戳和上一个时间戳之间差值的累积和
1.按新列分组并聚合数据