如何拆分Pandas DataFrame,使每组连续数字序列独立成DataFrame?
高效拆分Pandas DataFrame为连续序列子DataFrame列表
针对你的大型DataFrame拆分需求,完全不需要逐行循环,用Pandas的向量化操作就能高效解决,核心思路是通过生成分组键来标记每个连续序列:
- 生成分组标识:利用
ConsecutiveNumbers == 1的布尔结果累加,每次遇到1时分组号就会递增,这样每个连续序列会被分配到同一个分组里:
import pandas as pd # 假设你的DataFrame名为df df['group_id'] = (df['ConsecutiveNumbers'] == 1).cumsum()
- 按分组拆分:用
groupby按生成的group_id分组,直接提取每个分组对应的子DataFrame到列表中:
# 拆分并移除临时的group_id列 df_list = [group.drop('group_id', axis=1) for _, group in df.groupby('group_id')]
示例验证
比如构造一个测试DataFrame:
data = { 'ConsecutiveNumbers': [1,2,3,1,2,1,2,3,4], 'OtherData': ['a','b','c','d','e','f','g','h','i'] } df = pd.DataFrame(data)
运行上述代码后,df_list会包含3个子DataFrame,分别对应三个连续序列:
- 第一个子DataFrame:ConsecutiveNumbers为1、2、3
- 第二个子DataFrame:ConsecutiveNumbers为1、2
- 第三个子DataFrame:ConsecutiveNumbers为1、2、3、4
这种方法依赖Pandas内部优化的向量化运算,比逐行循环效率高几个数量级,完全适配大型DataFrame的处理场景。
内容的提问来源于stack exchange,提问作者kfrohwer
相关产品推荐
相关产品推荐

