如何将员工月度休假数据转换为按月份列展示的Pandas DataFrame
如何用Pandas将员工月度休假记录转换为宽格式DataFrame
针对你需要合并员工月度休假记录、将月份转为列的需求,可以通过Pandas的透视表功能快速实现,以下是具体步骤和代码:
步骤说明
- 读取并预处理数据:读取CSV文件后,先整理列名(原始列名含空格,处理成更易操作的格式),再将
Month Year列转换为月份英文缩写,匹配你期望的列名格式。 - 生成宽格式DataFrame:用
pivot_table将数据从长格式转成宽格式,以员工编码为索引,月份为列,休假天数为值。 - 调整格式:给列名加上
leavedays-前缀,将缺失的休假记录替换为nil,最后整理索引和列名。
完整代码示例
import pandas as pd # 读取CSV数据(假设文件名为employee_leaves.csv) df = pd.read_csv("employee_leaves.csv") # 处理列名,去除空格并统一小写 df.columns = df.columns.str.strip().str.replace(" ", "_").str.lower() # 将month_year列转换为月份英文缩写(如2-2022转为Feb) df['month_abbr'] = pd.to_datetime(df['month_year'], format='%m-%Y').dt.strftime('%b').str.capitalize() # 生成透视表,转换为宽格式 pivot_df = df.pivot_table( index='emp._code', columns='month_abbr', values='leave_days', aggfunc='first' # 每个员工每月只有一条记录,用first即可 ) # 重命名列,加上leavedays-前缀 pivot_df.columns = [f'leavedays-{col}' for col in pivot_df.columns] # 将缺失值替换为nil,重置索引并修改列名 result_df = pivot_df.reset_index().rename(columns={'emp._code': 'empcode'}).fillna('nil') print(result_df)
输出效果
运行代码后,会得到符合你需求的DataFrame:
empcode leavedays-Feb leavedays-Mar leavedays-Apr leavedays-May leavedays-Jun 0 1 10 20 3 2 nil 1 2 2 15 nil nil 4
如果你的原始数据中员工每月可能有多条休假记录,可以把aggfunc改成sum来合并当月总天数。
内容的提问来源于stack exchange,提问作者Mudasir Mohammad
相关产品推荐
相关产品推荐

