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

如何将已有考勤数据填充到包含整月日期的月度DataFrame中

实现方案

核心逻辑

我们可以通过「分组聚合→长宽表转换→透视补全日期列」三步完成需求,具体实现如下:
首先导入依赖:

import pandas as pd
from calendar import monthrange

步骤1:定义生成目标月度所有日期的工具方法

def get_month_dates(year, month):
    # 获取当月总天数
    _, days = monthrange(year, month)
    # 生成当月所有日期的字符串列表,格式和原数据date列保持一致
    return [f"{year}-{str(month).zfill(2)}-{str(day).zfill(2)}" for day in range(1, days+1)]

步骤2:处理原始考勤数据生成目标表

# 示例原始数据
example = pd.DataFrame({
    'Employee': ["Alex", "Alex", "Alex", "Bob", "Peter", "Peter"], 
    'date': ['2021-01-01', '2021-01-01', '2021-01-03', '2021-01-02', '2021-01-01', '2021-01-02'],
    'Total Hour': [1.5, 2.2, 7, 1, 3, 6], 
    'Overtime': [1.5, 0, 1.2, 2.3, 1.7, 5]
})

# 1. 按员工+日期分组,聚合同一天的多条考勤记录
agg_df = example.groupby(['Employee', 'date'], as_index=False).sum()

# 2. 将指标列(总时长、加班时长)转为长格式
melt_df = agg_df.melt(
    id_vars=['Employee', 'date'], 
    value_vars=['Total Hour', 'Overtime'],
    var_name='统计项'
)

# 3. 获取目标月份的所有日期,这里以2021年1月为例
target_year = 2021
target_month = 1
all_dates = get_month_dates(target_year, target_month)

# 4. 生成透视表,补全所有日期列
result = melt_df.pivot(
    index=['Employee', '统计项'],
    columns='date',
    values='value'
# 重新设置列顺序按当月日期排序,无数据的位置填充空字符串
).reindex(columns=all_dates).fillna('').reset_index()

# 输出查看结果
print(result)

后续考勤数据更新方法

新的考勤数据提交后,只需要将新数据追加到原始考勤DataFrame中,再重新执行上述步骤即可生成最新的月度考勤表,不需要额外兼容处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:03