根据时间或索引差异将 DataFrame 拆分为 Chunks

我正在尝试根据索引值或时间将 DataFrame 分成更小的 DataFrame。正如您在下面的示例中看到的,我的数据的时间分辨率是 5 分钟,我想在每行之间的时间差大于 5 分钟,或者索引增长超过 1 时创建一个新的数据帧(这是相同的标准,所以任何都可以)。


这是我的数据示例:


Index    Time     Data

0        6:00      A

1        6:05      D

2        6:10      B

58       10:50     C

59       10:55     A

60       11:00     D

92       13:40     A

93       13:45     B

我想拥有以下内容:


拆分 1:


Index    Time     Data

0        6:00      A

1        6:05      D

2        6:10      B

拆分 2:


Index    Time     Data

58       10:50     C

59       10:55     A

60       11:00     D

拆分 3:


Index    Time     Data

92       13:40     A

93       13:45     B


慕田峪4524236
浏览 284回答 2
2回答

尚方宝剑之说

您必须创建一个辅助系列,例如:s=df.index.to_series().diff().fillna(1).ne(1).cumsum()print(s)Index0     01     02     058    159    160    192    293    2然后您可以将每个组存储在字典中并调用字典的每个键来引用 df:d={f'df_{i}':g for i,g in df.groupby(s)}print(d['df_0'])print('\n')print(d['df_1'])print('\n')print(d['df_2'])       Time DataIndex           0      6:00    A1      6:05    D2      6:10    B        Time DataIndex            58     10:50    C59     10:55    A60     11:00    D        Time DataIndex            92     13:40    A93     13:45    B另一种使用方式more_itertools:from more_itertools import consecutive_groupsindices=[[*i] for i in consecutive_groups(df.index)]#[[0, 1, 2], [58, 59, 60], [92, 93]]d2={f'df_{e}':df.loc[i] for e,i in enumerate(indices)}

莫回无

另一种方法(基于stackoverflow上的早期答案,现在找不到链接)group=[]for k,g in df.groupby(df['Index'] - np.arange(df.shape[0])):    group.append(g)然后,您可以使用group[0], group[1] or group[2]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python