如何解决使用 python 分配轮班时间表熊猫数据框中的数据
我正在安排通话时间表。我的数据目前位于以下格式的数据框中:
ix WeekShift Date Week_Num Shift_Type Blocked People Available
0 1_FSu 2021-08-06 1 FSu [P5,P4] [P1,P2,P3,P4,P5] [P1,P2]
1 1_MTh 2021-08-02 1 MTh [P1,P5,P4] [P1,P5] [P3,P2]
2 2_FSu 2021-08-13 2 FSu [] [P1,P5] [P5,P1,P4]
3 2_MTh 2021-08-09 2 MTh [P1] [P1,P4]
4 3_FSu 2021-08-20 3 FSu [P2] [P1,P4]
5 3_MTh 2021-08-16 3 MTh [P1] [P1,P4]
6 4_FSu 2021-08-27 4 FSu [P1] [P1,P4]
基本上,我正在尝试创建一个新的“已分配”列,我从最符合以下规则/标准的给定列中的可用列表中选择一个人:
- 就 MTh 和 FSU 轮班次数而言,尽可能在所有 5 人中均匀分布
- 不能连续分配两个相同的班次(即最新的分配不应位于分配列表中的位置 -2)
- 不能分配到连续班次(即最新分配不应在分配列表中的位置 -1)
我的实际数据帧有点长。我目前的方法只是得到一个可行的解决方案,但可能有助于获得所有可能的工作组合。
编辑:进行了一些修改以更好地阐明问题。这也是我的初始方法(基本上取出列表并使用列表索引)。我仍在努力解决的问题是,我如何最终在计数之间获得相对均匀的分布,也不确定是否有办法建立“偏好”或“额外实用程序”,让人们更加分散什么时候
import random
testAvailable = df2.Available.tolist()
AssignList = []
for ix,x in enumerate(testAvailable):
randx = random.choice(x)
if len(AssignList)==1:
while randx==AssignList[0]:
randx=random.choice(x)
if len(AssignList)>1:
while (randx==AssignList[-1]) | (randx==AssignList[-2]):
randx=random.choice(x)
AssignList.append(randx)
print(AssignList)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。