我有两个数据框,其中包含员工数据,如下所示。一个数据文件包含员工数据,包括员工生病的日期,另一个数据文件包含员工工作的日期(即显示为日期范围)。 我想结合这两个文件(希望在熊猫)通过看一个特定员工的“病假”属于“工作范围”。例如,在下面的图片/数据中,员工1在2015年11月25日、2015年12月23日和2015年10月12日生病。这些分别属于“工作范围”11/21/2015-11/29/2015、12/21/2015-12/29/2015和10/9/2015-10/17/2015。你知道吗
员工工作日期数据:
╔══════════╦════════════╦════════════╗
║ Employee ║ datein ║ dateout ║
╠══════════╬════════════╬════════════╣
║ 1 ║ 11/21/2015 ║ 11/29/2015 ║
║ 2 ║ 12/9/2015 ║ 12/14/2015 ║
║ 3 ║ 11/10/2015 ║ 11/19/2015 ║
║ 4 ║ 11/11/2015 ║ 11/17/2015 ║
║ 5 ║ 11/30/2015 ║ 12/8/2015 ║
║ 1 ║ 12/21/2015 ║ 12/29/2015 ║
║ 2 ║ 1/7/2016 ║ 1/12/2016 ║
║ 3 ║ 12/10/2015 ║ 12/19/2015 ║
║ 4 ║ 12/10/2015 ║ 12/16/2015 ║
║ 5 ║ 12/30/2015 ║ 1/7/2016 ║
║ 1 ║ 10/9/2015 ║ 10/17/2015 ║
║ 2 ║ 10/27/2015 ║ 11/1/2015 ║
║ 3 ║ 9/28/2015 ║ 10/7/2015 ║
║ 4 ║ 9/29/2015 ║ 10/5/2015 ║
╚══════════╩════════════╩════════════╝
员工病假日期数据:
╔══════════╦════════════╦═══════════╗
║ Employee ║ sickDate ║ sickness ║
╠══════════╬════════════╬═══════════╣
║ 1 ║ 11/25/2015 ║ flu ║
║ 10 ║ 11/21/2015 ║ hd ║
║ 21 ║ 9/20/2015 ║ other ║
║ 1 ║ 12/23/2015 ║ other ║
║ 4 ║ 12/13/2015 ║ vacationx ║
║ 7 ║ 7/21/2015 ║ cough ║
║ 3 ║ 10/1/2015 ║ rash ║
║ 4 ║ 10/5/2015 ║ other ║
║ 5 ║ 1/7/2016 ║ eyex ║
║ 2 ║ 12/12/2015 ║ tanx ║
║ 1 ║ 10/12/2015 ║ fatiguex ║
╚══════════╩════════════╩═══════════╝
合并数据:
╔══════════╦════════════╦════════════╦════════════╦═══════════╗
║ Employee ║ datein ║ dateout ║ sickDate ║ sickness ║
╠══════════╬════════════╬════════════╬════════════╬═══════════╣
║ 1 ║ 11/21/2015 ║ 11/29/2015 ║ 11/25/2015 ║ flu ║
║ 2 ║ 12/9/2015 ║ 12/14/2015 ║ 12/12/2015 ║ tanx ║
║ 3 ║ 11/10/2015 ║ 11/19/2015 ║ ║ ║
║ 4 ║ 11/11/2015 ║ 11/17/2015 ║ ║ ║
║ 5 ║ 11/30/2015 ║ 12/8/2015 ║ ║ ║
║ 1 ║ 12/21/2015 ║ 12/29/2015 ║ 12/23/2015 ║ other ║
║ 2 ║ 1/7/2016 ║ 1/12/2016 ║ ║ ║
║ 3 ║ 12/10/2015 ║ 12/19/2015 ║ ║ ║
║ 4 ║ 12/10/2015 ║ 12/16/2015 ║ 12/13/2015 ║ vacationx ║
║ 5 ║ 12/30/2015 ║ 1/7/2016 ║ 1/7/2016 ║ eyex ║
║ 1 ║ 10/9/2015 ║ 10/17/2015 ║ 10/12/2015 ║ fatiguex ║
║ 2 ║ 10/27/2015 ║ 11/1/2015 ║ ║ ║
║ 3 ║ 9/28/2015 ║ 10/7/2015 ║ 10/1/2015 ║ rash ║
║ 4 ║ 9/29/2015 ║ 10/5/2015 ║ 10/5/2015 ║ other ║
╚══════════╩════════════╩════════════╩════════════╩═══════════╝
在熊猫或Python身上我该怎么做?(谢谢你的帮助!)你知道吗
考虑一种内部和外部的pandas merge方法。下面假设日期是
datetime
格式,可能需要从字符串对象转换:结果
你需要把这些数据放到
pd.DataFrame( ... )
作为df1 和set_index('Employee')
╔══════════╦════════════╦════════════╗ ║ Employee ║ datein ║ dateout ║ ╠══════════╬════════════╬════════════╣ ║ 1 ║ 11/21/2015 ║ 11/29/2015 ║ ║ 2 ║ 12/9/2015 ║ 12/14/2015 ║ ║ 3 ║ 11/10/2015 ║ 11/19/2015 ║ ║ 4 ║ 11/11/2015 ║ 11/17/2015 ║ ║ 5 ║ 11/30/2015 ║ 12/8/2015 ║ ║ 1 ║ 12/21/2015 ║ 12/29/2015 ║ ║ 2 ║ 1/7/2016 ║ 1/12/2016 ║ ║ 3 ║ 12/10/2015 ║ 12/19/2015 ║ ║ 4 ║ 12/10/2015 ║ 12/16/2015 ║ ║ 5 ║ 12/30/2015 ║ 1/7/2016 ║ ║ 1 ║ 10/9/2015 ║ 10/17/2015 ║ ║ 2 ║ 10/27/2015 ║ 11/1/2015 ║ ║ 3 ║ 9/28/2015 ║ 10/7/2015 ║ ║ 4 ║ 9/29/2015 ║ 10/5/2015 ║ ╚══════════╩════════════╩════════════╝
;然后把这些数据放到
pd.DataFrame( ... )
作为df2和set_index('Employee')
最后,
df = df1.join(df2).reset_index()
相关问题 更多 >
编程相关推荐