Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从另一个数据帧填充矩阵_Python_Pandas - Fatal编程技术网

Python 从另一个数据帧填充矩阵

Python 从另一个数据帧填充矩阵,python,pandas,Python,Pandas,我是Python初学者 在填写缺勤矩阵的循环过程中,我遇到了一个问题 缺勤矩阵: 索引表示从2020年初到今天的日期,列表示用户ID 数据帧如下所示: 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

我是Python初学者

在填写缺勤矩阵的循环过程中,我遇到了一个问题

缺勤矩阵:

索引表示从2020年初到今天的日期,列表示用户ID

数据帧如下所示:

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
当ID在
首次登场日期\u缺勤
DATE\u FIN\u缺勤
之间缺勤时

例如:

  • 如果在数据帧中
    ID\u USER=1
    2020/01/01
    2020/01/05
    之间不存在:
  • 如果
    列中没有矩阵=1
  • 指数:2020/01/01=1
  • 2020/01/02=1
  • 2020/01/03=1
  • 2020/01/04=1
  • 2020/01/05=1
以下是我启动的代码:

议程栏中的i的
:
对于缺席的j\u df.ID\u用户:
如果i==j和agenda.index[i]==缺席_df.iloc[j,4]:
议程.索引[i]==1
其他:
打印('false')
j=j+1
i=i+1
打破
印刷(议程)

我假设您的日期是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
导入日期时间
作为pd进口熊猫
开始=日期时间。日期(2020年1月1日)
结束=日期时间。日期(2020,1,5)
daterange=pd.date\u范围(开始、结束)
用户=已排序(列表(集合(df.ID\u用户)))
议程=pd.DataFrame(索引=日期范围,列=用户)
agenda.fillna(0,inplace=True)
对于日期范围内的日期:
ix=df[
(df.DATE_first
正如我所说,这将取决于您创建第一个数据帧的方式(DATE\u first和DATE\u last字段)。当您询问有关pandas的问题时,您应该做的是粘贴“真实”数据(csv文件样本的副本或创建数据帧的代码)。这会很有帮助的!谢谢,日期格式为datetime64[ns],ID\u用户为int64。这是我在网站上的第一天,所以我还不知道如何上传文件!不麻烦,我只是想帮你解决将来的问题;-)你试过我的答案了吗?我想它会和datetime64一起工作。。。pandas'date_range的迭代将以这种格式返回日期。我认为,我们应该在回答的“评论”部分继续此对话。必须更新与问题更新相关的字段名称。如果这一回答有效,请考虑将它标记为接受。我不理解你在问题部分最后一个评论中的后续问题。这是关于date_系列如何工作的问题吗?我只是重新创建了一个日期时间列表,列出了开始和结束之前所有可能的日期。