如何使用Pandas考勤数据查询入住和退房时间?

问题描述 投票:0回答:0

Attendance 我正在使用 pandas 处理如图所示的出勤数据。 punch_time 是员工签到或签出的时间。 punch_state 有两个值,即 0 表示签入,1 表示签出

我想做的是找到入住和退房时间,并将它们存储在每个员工的同一行中,就像这样Expected output.

根据punch_time和punch_state可以确定员工早晚两班倒。

我尝试使用 pandas 创建数据透视表。它适用于第一班次,因为他们在同一天办理入住和退房手续,但当一天入住和第二天退房时,它会导致第二班次数据出现问题。这个问题特别重要,尤其是中间有一个星期天(星期天休息),所以星期六入住和退房以及星期一入住和退房的数据。可以看到输出here

在输出中,您可以看到星期六的退房时间(1)即 2023-03-11 未正确分配,而是在 2023-03-12(星期日)列退房(1)

这是我写的数据透视表代码:

df['date'] = pd.to_datetime(df['date'])
# Create a new column for day of week
df['day_of_week'] = df['date'].dt.dayofweek

# Filter out Sundays where employee has not checked in
sundays = df[(df['day_of_week'] == 6) & (df['punch_state'] == 1)]['date']
df = df[(df['day_of_week'] != 6) | (df['date'].isin(sundays))]

# Create pivot table
pivot_table = pd.pivot_table(df, values=['time'], index=['employee_name', 'date'], columns='punch_state', aggfunc='first')
pivot_table = pivot_table.reset_index()

有什么办法可以解决这个问题吗?任何帮助将不胜感激。

python pandas group-by pivot-table time-and-attendance
© www.soinside.com 2019 - 2024. All rights reserved.