Python 自动排班
时间: 2023-11-05 10:04:41 浏览: 91
可以使用 Python 的第三方库 Pandas 和 NumPy 来实现自动排班。以下是一个简单的示例:
```python
import pandas as pd
import numpy as np
# 假设有 4 名员工和 7 天的工作日
num_employees = 4
num_days = 7
# 创建一个 DataFrame,用于存储员工排班信息
schedule = pd.DataFrame(np.zeros((num_days, num_employees)), columns=['Employee 1', 'Employee 2', 'Employee 3', 'Employee 4'])
# 定义一个函数,用于根据员工的可用时间和已排班情况来分配工作日程
def assign_schedule(day):
# 假设员工可用时间为 9:00 - 17:00,每天工作 8 小时
available_time = pd.date_range(start='09:00', end='17:00', freq='1H')
available_time = available_time[:-1] # 去掉最后一个时间点,因为员工不能在下班时间工作
# 找出已排班的员工
scheduled_employees = schedule.iloc[day].values.nonzero()[0]
# 从未排班的员工中找到可用时间最长的员工
available_employees = set(range(num_employees)) - set(scheduled_employees)
best_employee = None
max_available_time = pd.Timedelta(0)
for employee in available_employees:
available_time_employee = available_time[~available_time.isin(schedule.iloc[:, employee])]
if len(available_time_employee) > 0:
available_time_employee = pd.Timedelta(available_time_employee[-1] - available_time_employee[0])
if available_time_employee > max_available_time:
best_employee = employee
max_available_time = available_time_employee
# 如果找到了可用时间最长的员工,则将该员工分配到该天的排班中
if best_employee is not None:
schedule.iloc[day, best_employee] = 1
# 对每个工作日进行排班分配
for day in range(num_days):
assign_schedule(day)
# 输出排班结果
print(schedule)
```
该示例中,我们假设员工的可用时间为每天的 9:00 - 17:00,每天工作 8 小时。我们使用 Pandas DataFrame 来存储员工排班信息,并使用 NumPy 来计算员工可用时间和已排班情况。我们定义了一个函数 `assign_schedule`,用于根据员工的可用时间和已排班情况来分配工作日程。在每个工作日循环中,我们调用该函数来分配排班。最终,我们输出排班结果。
需要注意的是,该示例仅用于演示如何使用 Pandas 和 NumPy 实现自动排班。实际的排班需求可能更加复杂,需要根据实际情况进行相应的修改。