从数据库中导出的考勤时间记录都在一列,现在需要将它分成上班打卡和下班打卡,原本想着分组后用agg但是发现有跨天的情况。。有没有大佬帮帮忙
每个人的工号固定
班次时间是有的,日期+固定的上班下班时间
从数据库中导出的考勤时间记录都在一列,现在需要将它分成上班打卡和下班打卡,原本想着分组后用agg但是发现有跨天的情况。。有没有大佬帮帮忙
每个人的工号固定
班次时间是有的,日期+固定的上班下班时间
提供下解题思路:
1 获取打开时间的具体时间, 可以通过字符串分列获取
2 对时间进行分段(上班卡, 下班卡, 上班及加班前一天打卡)
3 对分段的数据进行整理, 算出加班的算哪一天打卡
4 最后对数据进行排序按日期和工号进行分组, 获取第一条数据和最后一条数据
部分代码如下:
import pandas as pd
import numpy as np
data = pd.read_excel('c:/users/用户/desktop/文件.xlsx')
data['时间'] = data['时间'].astype('str')
def qujian(i):
qj = ''
if '00:00:00'<=i<'03:00:00':
qj = '前一天加班下班卡'
elif '03:00:00'<=i<='09:00:00':
qj = '上班卡'
elif '09:00:00'<i<'17:00:00':
qj = '上班'
elif '17:00:00'<=i<='23:59:59':
qj = '下班卡'
return qj
data['区间'] = data['时间'].apply(lambda x: qujian(x))
from datetime import timedelta
aDay = timedelta(days=1)
data['实际日期'] = [i[1] - aDay if i[0]=='前一天加班下班卡' else i[1] for i in zip(data['区间'],data['日期'])]
print(data)
日期 姓名 时间 区间 实际日期
0 2021-02-01 张三 08:58:00 上班卡 2021-02-01
1 2021-02-01 张三 17:58:00 下班卡 2021-02-01
2 2021-02-02 李四 07:58:00 上班卡 2021-02-02
3 2021-02-02 李四 17:58:00 下班卡 2021-02-02
4 2021-02-02 李四 21:58:00 下班卡 2021-02-02
5 2021-02-02 王五 13:58:00 上班 2021-02-02
6 2021-02-03 王五 02:58:00 前一天加班下班卡 2021-02-02
7 2021-02-02 赵六 08:58:00 上班卡 2021-02-02
目前能想到的数据处理方法, 可能还有更好的.