专业服务 · 烟雨平生
Python笔记建站笔记资讯Docker运维
公告烟雨平生 —— 内容持续更新,欢迎指正。
首页 / 效率技巧 / 【行政办公系列】统计重复出现的人的次数 | 烟雨平生

【行政办公系列】统计重复出现的人的次数 | 烟雨平生

效率技巧 2026年10月02日 14:15 1814 字

以下分别介绍用 Excel 和 Python 的方法。举例:如下这张表格,想统计每个人出现的次数。注意:这里比单纯统计姓名复杂一丢丢,要考虑到不同班级出现同名的情况——同名并不等于同一个人,只有相同班级且同姓名的才是同一个人。所以,首先可以先用“班级+姓名”来表示一个人。在原表中增加一列,用公式 `=A2&B2` 求出 C 列,即“班级+姓名”的拼接结果;如果担心纯拼接产生歧义,还可以写成 `=A2&”|”&B2`,用分隔符把两段信息隔开。

为什么不能只按姓名统计

姓名本身不是唯一标识。不同班级出现同一个名字,行政表格里很常见;如果直接按姓名计数,就会把不同的人合并到一起。更稳妥的做法,是先用“班级+姓名”构造一个临时唯一键,再基于这个键统计。若表格里有学号、工号或身份证后几位,优先级应高于“班级+姓名”,因为它更接近真实唯一值。

Excel:辅助列配合 COUNTIF 或数据透视表

第一种方式适合临时表格。假设班级在 A 列,姓名在 B 列,从第 2 行开始:

1. 在 C2 输入 `=TRIM(A2)&”|”&TRIM(B2)`,向下填充。`TRIM` 可去掉前后空格,减少“看起来一样却统计不到一起”的问题。

2. 在 D2 输入 `=COUNTIF($C$2:$C$1000,C2)`,向下填充,即可得到每条记录对应的人出现了几次。

3. 若只想看每个人一行,可复制 C 列,使用“数据—删除重复值”,再用 `COUNTIF` 统计原 C 列。

第二种方式更直观:插入数据透视表,把“唯一标识”拖到“行”,再把“唯一标识”拖到“值”,值字段设置为“计数”。如果不想建辅助列,也可以把“班级”和“姓名”同时拖到行区域,再对姓名计数,效果类似,但辅助列更利于后续筛选和复核。

Python:pandas 分组更省事

如果表格多、需要重复处理,Python 会更合适。核心思路仍是先构造唯一标识,再分组计数:

“`python

import pandas as pd

df = pd.read_excel(“records.xlsx”)

df[“班级”] = df[“班级”].astype(str).str.strip()

df[“姓名”] = df[“姓名”].astype(str).str.strip()

df[“唯一标识”] = df[“班级”] + “|” + df[“姓名”]

counts = df.groupby(“唯一标识”).size().reset_index(name=”出现次数”)

counts.to_excel(“result.xlsx”, index=False)

dups = counts[counts[“出现次数”] > 1]

print(dups)

“`

也可以直接写 `df.groupby([“班级”, “姓名”]).size().reset_index(name=”出现次数”)`。若数据来自 CSV,把 `read_excel` 换成 `read_csv` 即可。统计结果可继续导出为 Excel、CSV,或写成 Markdown 表格。

几个容易踩的坑

  • 前后空格、全角半角、不可见字符:Excel 可用 `TRIM`、`CLEAN`,Python 可用 `strip()`、`replace()`。
  • 空单元格:拼接后可能产生异常值,最好先过滤或填充。
  • 合并单元格:先取消合并并补全班级信息,否则辅助列会错位。
  • 同班同名:若无学号,仍可能碰撞,应尽量寻找更强标识。

两种方法怎么选

Excel 适合少量数据、人工核对和临时报表;Python 适合多文件、定期重复和批量导出。若你平时在 Linux 学习空间里维护 Hexo 博客,也可以先用 Python 完成统计,再把结果整理成 Markdown 表格发布;用 Docker 固定 pandas、openpyxl 等依赖,能减少环境差异带来的麻烦。Docker 不是必需,但能让行政脚本更可迁移。

统计重复出现次数本身并不复杂,关键是把“人”的唯一标识定义清楚。先拼出“班级+姓名”,再用 `COUNTIF` 或 `groupby` 计数,就能兼顾同名不同班的情况,也让后续汇总更稳。处理历史表格时,建议保留原始列,新增辅助列,不要直接覆盖数据,方便复核。