从另一个数据框填充矩阵

时间:2020-10-22 07:27:33

标签: python pandas

我是Python初学者。

我在填写缺勤矩阵的循环过程中遇到问题。

缺席矩阵:

enter image description here

索引代表从beginning of 2020today的日期,列代表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

目标是用10填充缺席矩阵。 1DATE_DEBUT_ABSENCE之间缺少ID时,DATE_FIN_ABSENCE

示例:

  • 如果数据框ID_USER=1和{{1}之间缺少2020/01/01
  • 2020/01/05中没有矩阵的情况下
  • 索引:2020/01/01 = 1
  • 2020/01/02 = 1
  • 2020/01/03 = 1
  • 2020/01/04 = 1
  • 2020/01/05 = 1

这是我开始的代码:

columns = 1

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
相关问题