【发布时间】:2021-09-10 22:48:32
【问题描述】:
想象一下我有一个这样的数据框:
| ID | Quantity |
|---|---|
| AAA | 10 |
| BBB | 30 |
| CCC | 30 |
| DDD | 10 |
| EEE | 20 |
有没有办法添加一个“组”列,以便我可以创建类似数量的组?
例如,如果我想要数量总和约为 50 的组(不必精确):
| ID | Quantity | Group |
|---|---|---|
| AAA | 10 | 1 |
| BBB | 30 | 1 |
| CCC | 30 | 2 |
| DDD | 10 | 1 |
| EEE | 20 | 2 |
或数量总和约为 30 的组:
| ID | Quantity | Group |
|---|---|---|
| AAA | 10 | 1 |
| BBB | 30 | 2 |
| CCC | 30 | 3 |
| DDD | 10 | 1 |
| EEE | 20 | 1 |
我有非常大量的数据,想分批处理,但需要保证每批的数量列之和大致相等。
我希望这个问题相当清楚。非常感谢您非常提前。
【问题讨论】:
-
到目前为止您尝试过什么?您可能想要改写您的问题,因为您实际上并不是在进行传统意义上的“分组依据”,而是想要分配一个列 GROUP 并为每个范围分配一个组号。您还应该更具体地了解您的 Range 需要是什么。我会在一分钟内发布一个示例。
-
您在寻找最佳解决方案吗?它看起来像Multiple Knapsacks。这是一个NP完全问题。如果您只是想要一个解决方案,这可能很容易但很慢。
-
天啊,谢谢。 @Corralien 100% 正确,这就像多个背包除了我没有“背包”数量的上限。事实上,我完全想多了,但你让我得到了一个答案,我将在下面发布。