我是Python初学者。
我在填写缺勤矩阵的循环过程中遇到问题。
缺席矩阵:
索引代表从beginning of 2020
到today
的日期,列代表USER IDs
。
数据帧如下:
ID_USER NOM PRENOM DATE_first DATE_last
1 X X 30/05/2020 00:00 01/06/2020 23:59
1 X X 01/06/2020 00:00 02/06/2020 23:59
2 X X 01/06/2020 00:00 03/06/2020 23:59
以及我想要的结果:
DATE user1 user2
29/05/2020 0 0
30/05/2020 1 0
01/06/2020 1 1
02/06/2020 1 1
03/06/2020 0 1
目标是用1
和0
填充缺席矩阵。
1
和DATE_DEBUT_ABSENCE
之间缺少ID时,DATE_FIN_ABSENCE
。
示例:
ID_USER=1
和{{1}之间缺少2020/01/01
:2020/01/05
中没有矩阵的情况下这是我开始的代码:
columns = 1
答案 0 :(得分:0)
我假设这里的日期为datetime格式,但我不确定这是否会在第一次尝试时起作用(日期在python中比较棘手)。如果您可以共享数据集的样本,而不只是一个快照,那会更好。
import datetime
import pandas as pd
start = datetime.date(2020, 1, 1)
end = datetime.date(2020,1,5)
daterange = pd.date_range(start, end)
users = sorted(list(set(df.ID_USER)))
agenda = pd.DataFrame(index=daterange, columns=users)
agenda.fillna(0, inplace=True)
for date in date_range:
ix = df[
(df.DATE_first < date) & (date < df.DATE_last)
].index
users_absent = df.loc[ix, 'ID_USER'].tolist()
agent.loc[date, users_absent] = 1