将附近的时间戳分组在pandas中

rhfm7lfc  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(126)

我知道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)
我怎样才能做到这一点?

esyap4oy

esyap4oy1#

你可以groupby cumsum on(diff〉threshold):

threshold = pd.Timedelta('1s')

blocks = df['Timestamp'].diff().ge(threshold).cumsum()

df.groupby(blocks).agg({...})

注意:这个问题本身就有问题,例如,如果Timestamp类似于pd.date_range('2023-01-01', '2023-01-02', freq='.9s'),那么你就只有一个大组。

1.创建1秒的阈值
1.创建一个新列,该列是当前时间戳和上一个时间戳之间的差值
1.创建一个新列,该列是当前时间戳和上一个时间戳之间差值的累积和
1.按新列分组并聚合数据

相关问题