You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据原始值标记的区间将Pandas DataFrame拆分为多个子DataFrame

实现方案

核心思路

  • 通过累加标记生成唯一分组ID,每匹配到C列的begin值就新增一个分组,同一分组覆盖从begin到对应end的所有行
  • 按分组ID拆分即可得到所有子DataFrame

完整实现代码

import pandas as pd

# 1. 读入数据:以下为示例数据读入方式,实际使用可替换为你的本地文件路径
data = """A,B,C
F,Relax,begin
F,,
F,,
H,,
H,,
H,,
G,,
H,,
I,,
G,,
H,Relax,end
O,Cook,begin
Q,,
P,,
I,,
O,,
R,,
P,,
O,Cook,end
H,Relax,begin
F,,
G,,
I,,
I,,
I,,
I,,
I,,
I,,
I,Relax,end
"""
df = pd.read_csv(pd.io.common.StringIO(data))

# 2. 生成分组标识
df['group_id'] = (df['C'] == 'begin').cumsum()

# 3. 拆分得到子DataFrame列表,sub_dfs[0]对应dataframe1,依次类推
sub_dfs = [group.drop(columns='group_id') for _, group in df.groupby('group_id')]

# 4. 打印验证(可选)
for idx, sub_df in enumerate(sub_dfs, 1):
    print(f"dataframe {idx}")
    print(sub_df.to_csv(index=False))

可选校验逻辑

如果需要确保所有分组符合begin开头、end结尾的配对规则,可添加以下校验代码:

for idx, sub_df in enumerate(sub_dfs, 1):
    assert sub_df.iloc[0]['C'] == 'begin', f"第{idx}个分组首行不是begin"
    assert sub_df.iloc[-1]['C'] == 'end', f"第{idx}个分组末行不是end"

内容的提问来源于stack exchange,提问作者Leandro Miranda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:24:03