【发布时间】:2019-05-30 04:50:06
【问题描述】:
我目前正在解决一个问题,建议使用“Pandas”,因为它适合我的解决方案,所以我很抱歉,因为我对“Pandas”包有点陌生。
我要解决的问题是读取包含如下数据的文本文件:
EmpID,ProjectID,DateFrom,DateTo
1,100,2014-11-01,2015-05-01
2,101,2013-12-06,2014-10-06
3,102,2015-06-04,2017-09-04
5,103,2014-10-01,2015-12-01
2,100,2013-03-07,2015-11-07
2,103,2015-07-09,2019-01-19
4,102,2013-11-13,2014-03-13
4,103,2016-02-14,2017-03-15
5,104,2014-03-15,2015-11-09
现在我的任务是说明哪些员工在一个共同项目上一起工作的时间最长。
这是我目前的进步:
import pandas as pd
import datetime as dt
import numpy as np
date_parser = lambda c: pd.to_datetime(c, format='%Y/%m/%d', errors='coerce')
df = pd.read_csv('data.csv', delimiter = ',', parse_dates=[2,3], date_parser=date_parser)
#df.set_index("EmpID", inplace = True)
df.sort_values(['ProjectID'], inplace=True)
df['Days Worked'] = (df['DateTo'] - df['DateFrom']).dt.days
cutdown_projecs = df.groupby('ProjectID').filter(lambda x: len(x) >= 2)
print(cutdown_projecs)
我所做的是对表格进行排序,将日期值设置为正确的格式,按 ProjectID 排序,然后缩减为重复两次或更多次的项目(因为这意味着员工一起工作)。我还添加了一个新列,其中添加了“工作天数”。这导致我得到以下结果:
EmpID ProjectID DateFrom DateTo Days Worked
0 1 100 2014-11-01 2015-05-01 181
4 2 100 2013-03-07 2015-11-07 975
2 3 102 2015-06-04 2017-09-04 823
6 4 102 2013-11-13 2014-03-13 120
3 5 103 2014-10-01 2015-12-01 426
5 2 103 2015-07-09 2019-01-19 1290
7 4 103 2016-02-14 2017-03-15 395
现在,我需要关于如何正确解决问题的建议。我不知何故需要检查哪些数据范围在同一个项目上“冲突”,然后一起计算员工的工作日。如果您能给我小费,我将不胜感激。谢谢。
编辑:修复表格。
【问题讨论】:
-
您想知道项目中的每一对 EmpID 还是所有 EmpID?您对上面的玩具数据集的期望输出是什么?
-
@QuangHoang 我只想知道项目工作时间最长的一对 EmpID。我刚刚注意到表格的格式被弄乱了,我会修复它。
标签: python pandas csv datatable