我有一个数据框,其中包含一个月内唯一的工作日期列表,称为天。
我还有另一个数据框,其中包含员工报告上班的天数列表,称为报告。
我正在尝试寻找某天员工没有上班的报告。
以下是数据框的示例视图:
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
答案 0 :(得分:2)
您需要使用默认内部联接的merge
,然后使用emp_id
和date
的所有唯一值,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
过滤布尔布尔掩码:
~