Python 从另一个数据帧填充矩阵
我是Python初学者 在填写缺勤矩阵的循环过程中,我遇到了一个问题 缺勤矩阵: 索引表示从2020年初到今天的日期,列表示用户ID 数据帧如下所示: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
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
:
对于缺席的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_系列如何工作的问题吗?我只是重新创建了一个日期时间列表,列出了开始和结束之前所有可能的日期。