如何根据时间步长条件创建子数据帧? [复制]

分享于2023年02月22日 pandas python time-series 问答
【问题标题】:How to create subdataframes based on timestep conditions? [duplicate]如何根据时间步长条件创建子数据帧? [复制]
【发布时间】:2023-02-21 18:28:13
【问题描述】:

我有一个看起来像这样的数据框:

df
                         Pression
13/01/2022  09:01:02        3500
13/01/2022  09:01:13        3650
13/01/2022  09:01:24        4248
13/01/2022  09:01:35        4259
13/01/2022  09:01:46        4270
13/01/2022  11:43:28        345
13/01/2022  11:43:39        478
13/01/2022  11:43:50        589
15/01/2022  08:31:14        2048
15/01/2022  08:31:25        2574
15/01/2022  08:31:36        3659
15/01/2022  08:31:47        3784
15/01/2022  08:31:58        3968
15/01/2022  08:32:09        4009

我想根据时间步长创建子数据框,如果时间步长优于 11 secondes ,则意味着创建了一个子数据框:

EXPECTED OUTPUT:

df_1
                         Pression
13/01/2022  09:01:02        3500
13/01/2022  09:01:13        3650
13/01/2022  09:01:24        4248
13/01/2022  09:01:35        4259
13/01/2022  09:01:46        4270

df_2
                         Pression
13/01/2022  11:43:28        345
13/01/2022  11:43:39        478
13/01/2022  11:43:28        345
13/01/2022  11:43:39        478
13/01/2022  11:43:50        589


df_3
                         Pression
15/01/2022  08:31:14        2048
15/01/2022  08:31:25        2574
15/01/2022  08:31:36        3659
15/01/2022  08:31:47        3784
15/01/2022  08:31:58        3968
15/01/2022  08:32:09        4009

不使用循环我怎么能做到这一点?我已经在使用数据框列表,这在计算上可能很昂贵。


【解决方案1】:

创建数据框列表:

df.index = pd.to_datetime(df.index)

#convert DatetimeIndex to Series for possible get difference
s = df.index.to_series()
#create groups with cumulative sum
dfs = dict(tuple(df.groupby(s.diff().gt('11 s').cumsum())))

print (dfs[0])
                     Pression
2022-01-13 09:01:02      3500
2022-01-13 09:01:13      3650
2022-01-13 09:01:24      4248
2022-01-13 09:01:35      4259
2022-01-13 09:01:46      4270


print (dfs[1])
                     Pression
2022-01-13 11:43:28       345
2022-01-13 11:43:39       478
2022-01-13 11:43:50       589

print (dfs[2])
                     Pression
2022-01-15 08:31:14      2048
2022-01-15 08:31:25      2574
2022-01-15 08:31:36      3659
2022-01-15 08:31:47      3784
2022-01-15 08:31:58      3968
2022-01-15 08:32:09      4009

【讨论】: