在日常工作中,你是否经常遇到这样的场景:
手里有一份员工业绩明细表,需要统计每个部门的个人最高业绩、部门总业绩,还要计算业绩达标人数...
如果数据量少,还可以用Excel公式慢慢算。但数据量一大,不仅容易出错,还特别耗时!
今天,就教大家用Python + pandas,3步搞定这类复杂的数据统计!

📊 需求场景
假设我们有这样一份业绩excel数据:

注意:同一个员工可能有多条业绩记录,需要先汇总个人业绩,再进行部门统计。
最终需要得到的结果:
💻 核心代码实现
第一步:读取Excel数据
import pandas as pd
# 读取Excel文件
df = pd.read_excel('employee_performance.xlsx')
print(df.head())
第二步:计算员工个人总业绩
关键点:同一个员工可能有多条业绩记录,需要先按"部门+员工ID"分组求和。
# 计算每个员工的个人总业绩
emp_total = df.groupby(['部门', '员工 ID'])['业绩(元)'].sum().reset_index(name='个人总业绩')
print(emp_total)
解释:
groupby(['部门', '员工 ID']):按部门和员工ID分组['业绩(元)'].sum():对业绩求和reset_index(name='个人总业绩'):重置索引,并将新列命名为"个人总业绩"
第三步:按部门聚合统计
这是最核心的一步,需要同时计算三个指标:
# 按部门聚合核心指标
result = emp_total.groupby('部门').agg(
员工个人最高业绩=('个人总业绩', 'max'),
个人≥10000 员工数=('个人总业绩', lambda x: (x >= 10000).sum())
).reset_index()
# 计算部门总业绩(从原始数据直接求和)
dept_total = df.groupby('部门')['业绩(元)'].sum().rename('部门总业绩')
# 合并结果
result = result.merge(dept_total, on='部门')
# 调整列顺序
result = result[['部门', '员工个人最高业绩', '部门总业绩', '个人≥10000 员工数']]
# 确保数据类型为整型
result = result.astype({
'员工个人最高业绩': int,
'部门总业绩': int,
'个人≥10000 员工数': int
})
print(result)
关键技巧解析:
agg函数的高级用法:
agg(
新列名=('原列名', '聚合函数'),
新列名2=('原列名2', lambda x: 自定义函数)
)统计达标人数:
lambda x: (x >= 10000).sum()这个lambda函数会:
先判断每个值是否≥10000,返回True/False True会被当作1,False当作0 sum()求和就得到了达标人数 部门总业绩的计算:
注意这里是从原始数据df直接求和,而不是从emp_total 这样可以避免数据精度问题
🎯 完整代码
import pandas as pd
# 读取Excel文件
df = pd.read_excel('employee_performance.xlsx')
# 计算每个员工的个人总业绩
emp_total = df.groupby(['部门', '员工 ID'])['业绩(元)'].sum().reset_index(name='个人总业绩')
# 按部门聚合核心指标
result = emp_total.groupby('部门').agg(
员工个人最高业绩=('个人总业绩', 'max'),
个人≥10000 员工数=('个人总业绩', lambda x: (x >= 10000).sum())
).reset_index()
# 计算部门总业绩
dept_total = df.groupby('部门')['业绩(元)'].sum().rename('部门总业绩')
# 合并结果
result = result.merge(dept_total, on='部门')
# 调整列顺序和数据类型
result = result[['部门', '员工个人最高业绩', '部门总业绩', '个人≥10000 员工数']]
result = result.astype({
'员工个人最高业绩': int,
'部门总业绩': int,
'个人≥10000 员工数': int
})
# 打印结果
print(" 最终统计结果:")
print(result.to_string(index=False))
# 导出到新Excel
result.to_excel('result_summary.xlsx', index=False)
print("\n 结果已保存至: result_summary.xlsx")
📈 运行结果
📊 最终统计结果:
部门 员工个人最高业绩 部门总业绩 个人≥10000 员工数
销售部 15000 35000 2
技术部 20000 34000 1
行政部 9000 21500 0
市场部 25000 25000 1
💾 结果已保存至: result_summary.xlsx
通过本文,你学会了:
✅ 使用 groupby进行多级分组汇总✅ 使用 agg函数同时计算多个指标✅ 使用 lambda函数实现自定义统计✅ 使用 merge合并多个统计结果✅ 数据类型转换和列顺序调整
Python + pandas 的组合,让复杂的数据分析变得如此简单!
你平时工作中还有哪些重复性的Excel处理工作?欢迎在评论区留言,下期可能就会教你用Python自动化解决!
👍 觉得有用,记得点赞+在看+转发!
夜雨聆风