如何基于两列值拆分Pandas DataFrame为连续匹配的子DataFrame?
解决方案
核心思路
通过生成连续符合条件行的分组标识,利用groupby快速拆分出独立DataFrame,全程采用矢量化操作,适配大数据集需求。
实现代码
首先构造示例数据(可替换为你的真实数据集):
import pandas as pd # 构造示例DataFrame data = { 'col1': [1, 1, 1, 1, 11, 1, 1, 1, 1, 1], 'col2': [1, 1, 1, 1, 1, 0, 1, 1, 1, 1], 'col3': [3, 6, 9, 12, 13, 3, 6, 9, 6, 9] } df = pd.DataFrame(data)
执行拆分逻辑:
# 标记满足col1=1且col2=1的行 mask = (df['col1'] == 1) & (df['col2'] == 1) # 生成连续块的分组键:每遇到不满足条件的行,分组编号递增,实现连续块分割 group_key = (~mask).cumsum() # 拆分出所有连续符合条件的块,存入列表 split_dfs = [chunk for _, chunk in df[mask].groupby(group_key[mask])]
验证结果
遍历列表查看每个独立的DataFrame:
for idx, chunk in enumerate(split_dfs): print(f"拆分后的DataFrame {idx+1}:") print(chunk) print("-" * 35)
输出结果:
拆分后的DataFrame 1: col1 col2 col3 0 1 1 3 1 1 1 6 2 1 1 9 3 1 1 12 ----------------------------------- 拆分后的DataFrame 2: col1 col2 col3 6 1 1 6 7 1 1 9 8 1 1 6 9 1 1 9 -----------------------------------
效率说明
该方法基于pandas内置的矢量化运算,避免了循环遍历每行的低效操作,即使处理1000+行的数据集也能快速完成。
内容的提问来源于stack exchange,提问作者WilliamAshoti
相关产品推荐
相关产品推荐

