0

0

如何将Excel多工作表按“Roll Number”对齐合并,避免重复行

花韻仙語

花韻仙語

发布时间:2026-02-09 14:10:03

|

541人浏览过

|

来源于php中文网

原创

如何将Excel多工作表按“Roll Number”对齐合并,避免重复行

本文介绍一种基于pandas的稳健方案,将excel中任意数量的工作表提取“roll number”和“brief”列,并以每个表名为新列名、按学号对齐合并为单张宽表,彻底解决传统逐次merge导致的笛卡尔积式重复问题。

在处理教学或教务类Excel数据时,常遇到多个班级(如ClassA、ClassB)分表存储的情况:每张表结构相似但行数不一,且同一“Roll Number”可能在单表内出现多次(例如一名学生选修多门课)。目标是将所有表的“Brief”信息横向展开,以“Roll Number”为行索引、各表名为列名,形成规整的宽表——关键在于:同一学号的多条记录需严格按出现顺序一一对应,而非交叉匹配

原方法使用循环pd.merge(..., how='outer')的问题在于:它对相同Roll Number的所有行进行全组合(Cartesian product),导致11号学生在ClassA有2条、ClassB有1条时,生成2行重复的11号记录(如Maths 11 + Art 71 和 Science 12 + Art 71),违背业务逻辑。

✅ 正确思路是:为每个Roll Number组内的记录添加序号标签(cumcount),再以(Roll Number, 序号)为联合索引进行拼接。这样能保证“第1次出现的11号→ClassA第1条,ClassB第1条”,“第2次出现的11号→ClassA第2条,ClassB第2条”,缺失则填充NaN。

以下是完整可运行代码:

import pandas as pd

# 步骤1:一次性读取所有工作表为字典(键=表名,值=DataFrame)
df_dict = pd.read_excel("input.xlsx", sheet_name=None)

# 步骤2:对每张表提取关键列,并添加组内序号作为辅助索引
dfs = []
for sheet_name, df in df_dict.items():
    # 仅保留必要列,避免列名冲突
    subset = df[["Roll Number", "Brief"]].copy()
    # 为每个Roll Number组内行编号:0, 1, 2...
    subset["seq"] = subset.groupby("Roll Number").cumcount()
    # 设置复合索引:(Roll Number, seq),并重命名Brief列为表名
    subset = subset.set_index(["Roll Number", "seq"]).rename(columns={"Brief": sheet_name})
    dfs.append(subset)

# 步骤3:沿列方向拼接(axis=1),丢弃二级索引"seq",重置索引
result = pd.concat(dfs, axis=1).droplevel("seq").reset_index()

# 步骤4:输出结果(可选:按Roll Number排序)
result = result.sort_values("Roll Number").reset_index(drop=True)
result.to_excel("combined_output.xlsx", index=False)

print(result)

输出示例:

蚂蚁PPT
蚂蚁PPT

AI在线智能生成PPT

下载
   Roll Number      ClassA      ClassB
0           11    Maths 11      Art 71
1           11  Science 12         NaN
2           12     History       Maths
3           13         NaN  Science 12

? 关键点说明:

  • groupby("Roll Number").cumcount() 是核心:它为每个学号的首次出现标0、第二次标1……确保跨表对齐逻辑一致;
  • set_index(["Roll Number", "seq"]) 构建唯一行标识,避免merge歧义;
  • pd.concat(..., axis=1) 比循环merge更高效、更可控,天然支持多表对齐;
  • .droplevel("seq") 移除辅助索引后,Roll Number成为唯一行索引,符合最终需求。

⚠️ 注意事项:

  • 确保所有工作表中“Roll Number”列名完全一致(区分大小写与空格);
  • 若存在空值,cumcount()会将其计入计数(即NaN也参与分组编号),建议提前清洗:df.dropna(subset=["Roll Number"]);
  • 如需保留原始顺序(非按学号排序),删除最后的sort_values即可;
  • 内存敏感场景下,可对大文件分批处理,但本方案对万级行数据性能依然优秀。

该方法兼顾正确性、可读性与扩展性,是处理多表“一对多”对齐合并任务的标准实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

73

2025.12.04

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

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

3

2026.01.31

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

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

1416

2023.07.25

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

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

416

2023.07.31

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

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

566

2023.08.02

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

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

1249

2023.08.02

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

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

372

2023.08.02

绝对引用的输入方法
绝对引用的输入方法

绝对引用允许在公式中引用一个固定的单元格,而不会随着公式的复制和粘贴而改变引用的单元格。本专题为大家提供绝对引用相关内容的文章,大家可以免费体验。

4539

2023.08.09

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

124

2026.02.06

热门下载

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

精品课程

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

共162课时 | 16.3万人学习

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

共28课时 | 2.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号