如何按原始连续索引值分组拆分未重置索引的Pandas DataFrame
按原始索引相邻性分组Pandas DataFrame的解决方案
这个需求其实很容易实现,核心思路是通过判断索引的连续性来生成分组键,具体步骤如下:
步骤1:计算索引的连续性差值
首先我们需要获取DataFrame的索引,然后计算每一行索引与前一行索引的差值。当这个差值大于1时,说明当前行是一个新分组的起始点。
import pandas as pd # 假设你的DataFrame名为df # 将索引转换为Series,计算相邻索引的差值;第一行没有前一行,用fillna填充一个大于1的值(比如2),确保它被标记为新组起点 index_diff = df.index.to_series().diff().fillna(2)
步骤2:生成分组标识
接下来,我们对“差值大于1”的布尔值序列做累加求和,这样每遇到一个不连续的索引,分组标识就会递增,从而得到每个行对应的分组ID:
group_id = (index_diff > 1).cumsum()
步骤3:执行分组操作
现在用这个分组ID对DataFrame进行分组即可:
grouped_df = df.groupby(group_id)
验证分组结果
你可以遍历分组来确认结果是否符合预期:
for group_num, group_data in grouped_df: print(f"第 {group_num} 组:") print(group_data) print("---")
针对你提供的DataFrame,执行上述代码后,索引1-12会被分到同一组(因为它们的索引是连续的,差值都是1),索引61的行会单独成为一组。如果你的实际需求是要把1-9和10-12分成两组,那可能是基于其他规则(比如时间帧的间隔),但如果是严格按索引相邻性的话,1-12属于同一连续序列哦。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

