pandas如何提取DataFrame中num列连续行并拆分到多个DataFrame
实现方案
核心逻辑是通过相邻行num列的差值识别连续段边界,给每段连续整数分配唯一分组ID后拆分即可,全程用pandas原生向量化运算,不需要写显式循环,效率很高。
具体步骤
- 若
num列未按升序排列,先对num列排序重置索引(已排序可跳过该步) - 计算相邻行
num的差值,差值不等于1的位置即为新连续段的起点,对判断结果累加生成分组ID - 按分组ID遍历分组,去掉临时生成的分组ID列,就能得到每个连续段对应的独立DataFrame
代码实现
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'num': [3, 4, 5, 26, 27, 30, 31, 32], 'mut': ['-'] * 8 }) # 生成分组标签:连续的整数会被分到同一个标签下 df = df.sort_values('num').reset_index(drop=True) df['group_tag'] = (df['num'].diff() != 1).cumsum() # 拆分得到所有连续段的DataFrame,存入列表 split_dfs = [g.drop(columns='group_tag') for _, g in df.groupby('group_tag')]
结果验证
遍历split_dfs即可拿到需要的3个独立DataFrame:
split_dfs[0]对应num值为3、4、5的行组split_dfs[1]对应num值为26、27的行组split_dfs[2]对应num值为30、31、32的行组
注:如果原始数据的
num列本身已经是升序排列,可以直接跳过排序重置索引的步骤,不影响分组结果。
内容的提问来源于stack exchange,提问作者Tia Cava
相关产品推荐
相关产品推荐

