我以以下数据帧为例(已按PERSON_NUMBER
排序):
Date_From Date_To PROPOSAL_REASON
PERSON_NUMBER
3720081000 2008-01-04 2009-12-07 MEINC
3720081000 2018-07-01 2019-03-31 MEINC
3720081000 2019-04-01 2019-10-31 MEINC
3720081018 2018-07-01 2019-03-31 MEINC
3720081018 2019-04-01 2019-10-31 MEINC
3720081077 2018-07-01 2019-03-31 MEINC
3720081111 2019-04-01 2019-10-31 MEINC
3720081211 2018-07-01 2019-03-31 MEINC
3720081211 2019-06-01 2019-10-31 MEINC
我需要验证,每个员工(每个员工可以有一个或多个记录)如果每行,第一条记录+1天的Date_To
应该是第二条记录的Date_From
,这意味着创建记录的天数应该没有间隔
对于有这种差距的员工,我想筛选他们并将他们保存在另一个数据框中
因此,例如,从give dataframe,我希望下面的输出使用此信息创建一个列(记录的第一行总是OK
):
Date_From Date_To CHECK_CONDITION
PERSON_NUMBER
3720081000 2008-01-04 2009-12-07 OK
3720081000 2018-07-01 2019-03-31 WARNING
3720081000 2019-04-01 2019-10-31 OK
3720081018 2018-07-01 2019-03-31 OK
3720081018 2019-04-01 2019-10-31 OK
3720081077 2018-07-01 2019-03-31 OK
3720081111 2019-04-01 2019-10-31 OK
3720081211 2018-07-01 2019-03-31 OK
3720081211 2019-06-01 2019-10-31 WARNING
因此,正如您所看到的,WARNING
记录中的Date_From
值不是前一个Date_To
值+1天
您可以尝试以下方法:
使用:
说明:
步骤1:使用^{} 转换
Date_To
&Date_From
列转换为时间序列步骤2:使用
np.arange
在df
中创建一个临时列count
,作为datframe中行的唯一计数器,这有助于跟踪边界条件,这有助于区分排序数据帧中的下一个雇员和上一个雇员步骤3:创建一个布尔掩码} 获得两列之间的天数,然后使用^{} 创建一个布尔掩码,其中truthy值对应于总天数等于
m1
,从移位的“Date_To”列中减去“Date_From”,然后使用^{1
的条件步骤4:使用} 创建布尔掩码
Series.eq
和level=0
上的^{m2
,其中truthy值对应于员工id的边界条件步骤5:使用^{} 根据条件
m1 | m2
从OK
和WARNING
中选择标量值:相关问题 更多 >
编程相关推荐