讲师中心 微信公众号
AI工具推荐 视频效率加速

如何将Excel多个工作表按学号合并为宽表结构

浅雪小哥_6610

浅雪小哥_6610

发布时间:2026-02-10 17:12:02

|

657人浏览过

|

来源于php中文网

原创

如何将Excel多个工作表按学号合并为宽表结构

本文介绍使用pandas高效合并excel中多个工作表的方法:以“roll number”为键,将各表的“brief”列分别作为独立列展开,避免传统循环merge导致的笛卡尔积重复问题。

在处理多班级、多学期或分批次采集的学生成绩/课程数据时,常遇到一个Excel文件包含多个工作表(如ClassA、ClassB),每张表结构不完全一致,但均包含关键字段Roll Number和Brief。目标是将所有工作表中的Brief信息,按Roll Number对齐、横向展开为宽表——即每个工作表对应一列,同一学号的多条记录按出现顺序逐行对齐(而非交叉匹配)。

你最初尝试的pd.merge循环方式失败的根本原因在于:merge默认基于键做全连接(outer join),当某学号在一张表中出现多次(如Roll Number=11在ClassA中有两条记录),而另一张表中仅出现一次时,merge会生成所有组合(即11×11 → 2行×1行 = 2行结果,但ClassB列被重复填充),造成逻辑错误与数据冗余。

✅ 正确解法的核心思路是:为每个学号在各表内的多条记录添加唯一序号(row number within group),再以(Roll Number, 序号)为复合索引进行拼接。这样可确保同组内第1条、第2条……严格对齐,彻底规避错位与爆炸式连接。

kashen-mysql DDLtoExcel
kashen-mysql DDLtoExcel

解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。

下载

以下是完整、健壮的实现步骤:

✅ 步骤 1:一次性读取全部工作表为字典

import pandas as pd

# 用 sheet_name=None 直接读取所有sheet到字典 {sheet_name: DataFrame}
df_dict = pd.read_excel("input.xlsx", sheet_name=None)

✅ 步骤 2:为每张表提取并标记行序号

对每张表:

  • 仅保留 Roll Number 和 Brief 列;
  • 使用 groupby('Roll Number').cumcount() 为每个学号内部的记录编号(从0开始);
  • 将 Roll Number 和该序号设为双重索引;
  • 将 Brief 列重命名为对应工作表名(如 'ClassA')。
dfs = []
for sheet_name, df in df_dict.items():
    # 提取必要列 + 添加组内序号
    temp = df[['Roll Number', 'Brief']].copy()
    temp['seq'] = temp.groupby('Roll Number').cumcount()
    # 设置复合索引并重命名列
    temp = temp.set_index(['Roll Number', 'seq'])[['Brief']].rename(columns={'Brief': sheet_name})
    dfs.append(temp)

✅ 步骤 3:沿列方向拼接并整理索引

# 按列(axis=1)拼接所有带复合索引的DataFrame
result = pd.concat(dfs, axis=1).reset_index(level='seq', drop=True).reset_index()
? 关键说明:pd.concat(..., axis=1) 在索引对齐时天然支持“相同 (Roll Number, seq) 对应同一行”,因此无需手动merge;.droplevel(1) 或 .reset_index(level='seq', drop=True) 用于丢弃无意义的seq索引层级,最终得到干净的三列结构:Roll Number, ClassA, ClassB……

✅ 完整可运行示例(含测试数据)

import pandas as pd

# 模拟原始Excel多Sheet数据
data_classa = {'Roll Number': [11, 11, 12], 'Brief': ['Maths 11', 'Science 12', 'History']}
data_classb = {'Roll Number': [11, 13, 12], 'Brief': ['Art 71', 'Science 12', 'Maths']}
df_dict = {'ClassA': pd.DataFrame(data_classa), 'ClassB': pd.DataFrame(data_classb)}

# 执行核心逻辑
dfs = []
for name, df in df_dict.items():
    temp = df[['Roll Number', 'Brief']].copy()
    temp['seq'] = temp.groupby('Roll Number').cumcount()
    temp = temp.set_index(['Roll Number', 'seq'])[['Brief']].rename(columns={'Brief': name})
    dfs.append(temp)

out = pd.concat(dfs, axis=1).reset_index(level='seq', drop=True).reset_index()
print(out)
# 输出:
#    Roll Number      ClassA      ClassB
# 0         11    Maths 11      Art 71
# 1         11  Science 12         NaN
# 2         12     History       Maths
# 3         13         NaN  Science 12

# 保存结果
out.to_excel("combined_output.xlsx", index=False)

⚠️ 注意事项

  • 若某学号在某表中无记录,对应单元格自动为 NaN,符合预期;
  • cumcount() 默认从 0 开始编号,确保各表第0条、第1条……严格对齐;
  • 若原始数据含空值(如缺失Roll Number),建议提前清洗:df.dropna(subset=['Roll Number']);
  • 工作表名若含空格或特殊字符,rename() 后列名会自动保留,导出Excel时无影响;
  • 内存优化:对于超大文件,可改用 chunksize 分批处理,但本场景通常无需。

此方法简洁、高效、可扩展,轻松应对数十个工作表、百万级行数的合并需求,是处理教育类、问卷类多源Excel数据的标准实践。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

340

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

272

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

771

2026.04.13

excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

5781

2023.07.25

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

3636

2023.07.31

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

3420

2023.08.02

excel表格斜线一分为二
excel表格斜线一分为二

在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

1444

2023.08.02

excel斜线表头一分为二
excel斜线表头一分为二

excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

717

2023.08.02

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 45.1万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn