我有一个带有此信息的df ['名称','部门','日期','时间','活动'], 所以例如看起来像这样:
Hirto的Acosta,西28街225号9/18/2019 07:25:00 Punch In
赫托(Hirto)阿科斯塔(Acosta),西28街225号9/18/2019 11:57:00打孔
赫托Acosta,西28街225号9/18/2019 12:28:00打孔
亚当斯,胡安225西28街9/16/2019 06:57:00打孔
亚当斯,胡安225西28街9/16/2019 12:00:00打孔
亚当斯,胡安225 West 28th Street 9/16/2019 12:28:00 Punch In
亚当斯,胡安225西28街9/16/2019 15:30:00打孔
亚当斯,胡安225 West 28th Street 9/18/2019 07:04:00 Punch In
亚当斯,胡安225西28街9/18/2019 11:57:00打孔
我需要计算同一位员工在同一天从打卡到打卡的时间。 我设法清理数据 喜欢:
self.raw_data['Time'] = pd.to_datetime(self.raw_data['Time'], format='%H:%M').dt.time
sorted_db = self.raw_data.sort_values(['Name', 'Date'])
sorted_db = sorted_db[['Name', 'Department', 'Date', 'Time', 'Activity']]
任何建议将不胜感激
答案 0 :(得分:0)
所以我找到了问题的答案,我想分享它。
如果有两列,则首先将“ Punch in”和“ Punch Out”分开
def process_info(self):
# filter data and organized --------------------------------------------------------------
self.raw_data['in'] = self.raw_data[self.raw_data['Activity'].str.contains('In')]['Time']
self.raw_data['pre_out'] = self.raw_data[self.raw_data['Activity'].str.contains('Out')]['Time']
我按日期和时间对信息库进行排序
sorted_data = self.raw_data.sort_values(['Date', 'Name'])
此后,我使用shift函数将“ out”列向上移动,使其与in平行。
sorted_data['out'] = sorted_data.shift(-1)['Time']
最后,我取出第一步中创建的多余列。但要检查它本身。
filtered_data = sorted_data[sorted_data['pre_out'].isnull()]