【发布时间】:2016-01-16 22:10:15
【问题描述】:
我有两个包含员工数据的数据框,如下所示。一个数据文件包含员工数据,包括员工生病的日期,另一个数据文件包含员工工作的日期(即显示为日期范围)。 我想通过查看特定员工的“病假日”在“工作范围”中的哪个位置来合并这两个文件(希望在 pandas 中)。例如,在下面的图像/数据中,员工 1 于 2015 年 11 月 25 日、2015 年 12 月 23 日和 2015 年 12 月 10 日生病。这些分别属于“工作范围”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 ║
╚══════════╩════════════╩════════════╩════════════╩═══════════╝
如何在 pandas 或 python 中做到这一点? (感谢您的帮助!)
【问题讨论】: