首页 > 解决方案 > 如何为所有员工查找给定月份的所有缺失日期

问题描述

我正在使用 python pandas 来计算员工的效率。我有一个描述某家公司员工的数据框。每个员工都有唯一的员工 ID。数据框显示所有员工的月数记录。因此,每个员工的 DF 可能会缺几天。因此,这些日期范围必须填充为零行,其中列日期为缺失日期,ID 为员工 ID。例子 -

Employee WH       Date    C3 C4 C5 
11        6  2021-06-03   -   -  -
11        7  2021-06-06
11        8  2021-06-08
13        5  2021-06-01
13        7  2021-06-02
13        7  2021-06-28

员工 ID 11 的缺失日期为 01,02,04,05,07,09---30。员工 ID 13 的缺失日期是 03,--27, 29,30。就像这样,可能有多个员工缺少日期范围。DF 需要填充所有具有 Id 和 date 以及其余列为 0 的缺失值,并重新编制索引。

标签: pythonpandas

解决方案


这可以通过重新索引来完成

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html

您需要首先构建所需的新索引(所有员工,每日频率),然后将原始数据框中的标识列设置为索引,最后重新索引并将填充值指定为 0。

id_cols = ['Date','Employee']

new_index = pd.MultiIndex.from_product(
        [pd.date_range(start='2021-06-01', end='2021-06-30', freq='D'),
         list_of_unique_employee_IDs],
    names = id_cols
    )

df2 = df.set_index(id_cols).reindex(new_index, fill_value = 0)

如果您还没有所有唯一员工 ID 的列表,则可以改为从原始 df 中获取它df.Employee.unique()

如果您想返回默认整数索引而不是保留 Employee 和 Date 的 MultiIndex,您可以.reset_index()在最后一行的末尾添加一个,它会将 Employee 和 Date 作为列插入数据框中


推荐阅读