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

如何在Pandas DataFrame中提取分组标题及对应数据生成独立DataFrame

拆分分组式Pandas DataFrame为独立子DataFrame

针对你提到的Excel导出的特殊格式DataFrame(分组标题+不定行数数据+空行分隔),可以按以下步骤拆分每个分组为独立的DataFrame:

步骤1:清理数据,移除空行

首先删除全为空的分隔行,避免干扰分组识别:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('your_file.xlsx')

# 删除所有列都为空的行
df = df.dropna(how='all').reset_index(drop=True)

步骤2:标记分组标题行

根据你的需求,分组标题名称是固定的,可直接通过名称匹配标记标题行;如果标题行是通过Excel加粗格式区分的,可通过读取单元格格式识别:

方式A:通过固定标题名称标记

# 定义所有分组标题的列表
group_headers = ['First Group Header', 'Second Group Header', 'Third Group Header']

# 标记每行是否为标题行
df['is_header'] = df['Name'].isin(group_headers)

方式B:通过Excel加粗格式标记

如果标题行是靠字体加粗区分的,需要借助openpyxl读取单元格格式:

from openpyxl import load_workbook

wb = load_workbook('your_file.xlsx')
ws = wb.active

# 遍历数据行(跳过表头行),检查Name列单元格是否加粗
is_header = []
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
    name_cell = row[0]  # Name列对应Excel的第一列
    is_header.append(name_cell.font.bold)

# 将标记结果加入DataFrame
df['is_header'] = is_header

步骤3:生成分组ID并拆分

通过累计求和生成每个分组的唯一ID,再按ID拆分出独立的DataFrame:

# 生成分组ID:每遇到一个标题行,ID递增
df['group_id'] = df['is_header'].cumsum()

# 存储所有分组的DataFrame,键为分组标题,值为对应子DataFrame
group_dfs = {}

for gid in df['group_id'].unique():
    group_data = df[df['group_id'] == gid].reset_index(drop=True)
    # 获取当前分组的标题名称
    header_name = group_data[group_data['is_header']]['Name'].iloc[0]
    group_dfs[header_name] = group_data

# 调用示例:获取第一个分组的DataFrame
first_group_df = group_dfs['First Group Header']

补充说明

  • 每个子DataFrame默认包含对应分组的标题行和所有数据行,如果不需要标题行,可在拆分时加上group_data = group_data[~group_data['is_header']]过滤掉标题行。
  • 该方案适配分组数据行数不固定的情况,只要标题名称或格式不变,就能自动识别分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:43