我是Python初学者。我在循环填充缺勤矩阵时遇到问题。缺席矩阵:beginning of 2020索引表示从到 的日期today,列表示USER IDs。数据框如下:ID_USER NOM PRENOM DATE_first DATE_last1 X X 30/05/2020 00:00 01/06/2020 23:591 X X 01/06/2020 00:00 02/06/2020 23:592 X X 01/06/2020 00:00 03/06/2020 23:59和我想要的结果:DATE user1 user229/05/2020 0 030/05/2020 1 001/06/2020 1 102/06/2020 1 103/06/2020 0 1目标是用1和填充缺席矩阵0。 当和1之间缺少 ID 时。DATE_DEBUT_ABSENCEDATE_FIN_ABSENCE例子 :如果 Dataframe 中和ID_USER=1之间不存在:2020/01/012020/01/05在没有矩阵的情况下columns = 1索引:2020/01/01 = 12020/01/02 = 12020/01/03 = 12020/01/04 = 12020/01/05 = 1这是我开始的代码:for i in agenda.columns: for j in absence_df.ID_USER: if i==j and agenda.index[i]==absence_df.iloc[j,4]: agenda.index[i]==1 else : print('false') j=j+1 i= i+1 break print(agenda)
1 回答
森栏
TA贡献1810条经验 获得超5个赞
我假设你的日期是日期时间格式,尽管我不确定这在第一次尝试时是否有效(日期在 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
添加回答
举报
0/150
提交
取消