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