让我们考虑两个单独的数据帧:
DF1:
ID Name Surname Total_Value [further, not important as of now booleans etc.]
1 John Smith 1.0
2 Adam Johnson 0.95
DF2:
Task_Name Value Person_ID
[...] [...] [...]
Task_132 0.08 None
这是我所遇到的问题的非常简化的版本,因此,如果在响应中很重要,请告诉我。我要做的是将所有任务从 DF2 分配给在 DF1 中Total_Value最少的人。显然,当我将Task#132分配给Adam Johnson时,他将拥有更大的Total_Value,因此下一个任务将分配给另一个人。
到目前为止,我已经用一个糟糕的VBA代码解决了这个问题,该代码基本上循环遍历 DF2 中的每个元素,然后再次遍历所有 DF1 元素(直到10次,以找到最合适的位置)。如果 DF1 中有大约200个元素,而 DF2 中有4000个元素,则花费的时间太长了,对于将来进行更改,这根本不是一个好的解决方案。
我确实相信在Python中有一种更好的方法,但是我不确定如何在不使用多个循环和沿途重新定义DataFrame的情况下做到这一点。
编辑:仍然没有想出其他解决方案,考虑到沉默,我想知道是否有可能。另外-改进了格式。
答案 0 :(得分:2)
我认为,如果将其实现为Priorityqueue,例如使用heapq,则可以使DF1中最小元素的查询更快。这些数据结构允许在O(log n)
时间内提取最小的元素并插入/更新元素。您仍然需要遍历DF2中的任务,但是更新会更快。