python - 根据时间或索引差异将DataFrame分割成Chunk

标签 python pandas

我试图根据索引值或时间将数据帧分成更小的数据帧。正如您在下面的示例中看到的,我的数据的时间分辨率是 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

最佳答案

您必须创建一个辅助系列,例如:

s=df.index.to_series().diff().fillna(1).ne(1).cumsum()
print(s)
Index
0     0
1     0
2     0
58    1
59    1
60    1
92    2
93    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 Data
Index           
0      6:00    A
1      6:05    D
2      6:10    B


        Time Data
Index            
58     10:50    C
59     10:55    A
60     11:00    D


        Time Data
Index            
92     13:40    A
93     13:45    B

使用more_itertools的另一种方法:

from more_itertools import consecutive_groups
indices=[[*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)}

关于python - 根据时间或索引差异将DataFrame分割成Chunk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57635128/

相关文章:

python - 使用 numpy 填充数组

python - 如何从一系列数组构建 Pandas 数据框

python - 如何解析改变格式的德国日期?

python - 如何访问python中模块的所有内置函数列表

python - 在pytorch的神经网络中将参数限制为-1、0或1

python - 将 df 的 col 中的每个元素从字符串转换为列表

python - 有没有办法用相应的大陆来标记一个区域? Python

python - 使用另一个数据集中的列中的值填充空值

python - 如何修复 flake 8 错误 "E712 comparison to False should be ' 如果 cond 为 False :' or ' 如果不是 cond :'"在 pandas dataframe

python - 无法找出 Heroku 应用程序失败的位置 [错误 : pg_config executable not found.]