熊猫-按日期比较两个数据框并找到缺失的全部

时间:2018-12-11 06:54:16

标签: pandas pandas-groupby

我有一个数据框,其中包含一个月内唯一的工作日期列表,称为天。

我还有另一个数据框,其中包含员工报告上班的天数列表,称为报告。

我正在尝试寻找某天员工没有上班的报告。

以下是数据框的示例视图:

System.Net.WebException: The remote server returned an error: (407) Proxy Authentication Required.

称为报告的数据框的视图:

days
11/1/2018
11/2/2018
11/3/2018
11/4/2018
11/5/2018
11/6/2018
11/7/2018

预期的输出(列出员工未报告的天数):

emp_id, date
1001,11/1/2018
1001,11/2/2018
1002,11/1/2018
1002,11/3/2018
1003,11/3/2018

更新,我如下创建了第一个数据框

emp_id,date
1001,11/3/2018
1002,11/2/2018
1003,11/1/2018
1003,11/2/2018

1 个答案:

答案 0 :(得分:2)

您需要使用默认内部联接的merge,然后使用emp_iddate的所有唯一值,reindex,最后merge并使用参数{{1} }过滤未报告的行:

indicator=True

reported['date'] = pd.to_datetime(reported['date'])

df1 = reported.set_index(['emp_id', 'date'])
mux = pd.MultiIndex.from_product(df1.index.levels, names=df1.index.names)

感谢@IMCoins的另一种解决方案是使用df3 = (df1.reindex(mux) .reset_index() .merge(reported, indicator=True, how='outer') .query('_merge != "both"') .drop('_merge', axis=1)) print (df3) emp_id date 2 1001 2018-11-03 4 1002 2018-11-02 6 1003 2018-11-01 7 1003 2018-11-02 isin过滤布尔布尔掩码:

~