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

如何用Pandas合并员工花名册与训练数据并生成指定透视表?

合并员工花名册与训练状态报表并透视训练数据

作为刚接触Python和Pandas的新手,我最近完成了一个报表合并的任务,在这里分享我的实现过程和解决方案,希望能帮到有类似需求的小伙伴,也欢迎各位大佬提出优化建议!

背景与示例数据

我有两份报表需要处理:

  • 训练状态报表:包含15列,通过Training Code列的逻辑生成Training列,同一员工完成多项训练时会重复出现(比如示例里的Name2)
  • 员工主花名册:包含9列,基于Status列生成Required列,是唯一的员工列表

训练状态报表示例代码与输出

import pandas as pd
df = pd.DataFrame({
    'Name':['Name1','Name2','Name2','Name3'], 
    'Office':['A', 'B', 'B', 'A'], 
    'Position':['Director','Manager','Manager','Analyst'], 
    'Training Code':['C3','C1-L','C2','C1-B'], 
    'Training':['ADV','BEG','INT','BEG'] 
})

输出结果:

Name Office  Position Training Code Training
0  Name1      A  Director           C3      ADV
1  Name2      B   Manager         C1-L      BEG
2  Name2      B   Manager           C2      INT
3  Name3      A   Analyst         C1-B      BEG

员工主花名册示例代码与输出

df4 = pd.DataFrame({
    'Name':['Name1','Name2','Name3','Name4'], 
    'Office':['A', 'B', 'A', 'C'], 
    'Position':['Director','Manager','Analyst','Supervisor'], 
    'Symbol':['OS','BP','OD','EO'], 
    'Status':[1,3,8,2], 
    'Required':['Required','Required','Recommended','Required']
})

输出结果:

Name Office    Position Symbol  Status     Required
0  Name1      A    Director     OS       1     Required
1  Name2      B     Manager     BP       3     Required
2  Name3      A     Analyst     OD       8  Recommended
3  Name4      C  Supervisor     EO       2     Required

需求目标

需要将两份报表合并为指定格式:以员工主花名册为基础,合并透视后的训练数据——也就是把Training列拆分为多列,并统计每个员工对应训练的完成次数。

实现过程与解决方案

我一开始尝试先透视训练数据再和主花名册合并,但不确定这种方式是不是最优解。后来我尝试先合并两个表再进行透视,结果遇到了生成空DataFrame的问题,最后把透视时的aggfunc从count改成len就解决了这个问题。

完整的实现代码如下:

# 左连接主花名册和训练数据的Name、Training列
result = pd.merge(df4, df[['Name','Training']], on='Name', how='left')
# 将空的Training值填充为'NONE'
result.update(result[['Training']].fillna('NONE'))
# 指定透视的索引列
cols = ['Name','Office','Position','Symbol','Status','Required']
# 透视表:按指定列分组,Training列作为列,统计次数并填充空值为0
pvt2 = result.pivot_table(index=cols, columns=['Training'], fill_value=0, aggfunc=len)

这样就能得到以主花名册为基础,每个员工对应不同训练完成次数的透视结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:37:09