我正在解决一个问题,通过使用属性的累积总和(在被排序之后)对行进行分组。但我是 python 新手,不知道如何处理它。请多多指教。任何帮助表示赞赏。
这是我的输入,这是我制作的熊猫数据框。如您所见,键和组都不是有序的。
key group v1 v2
1_A 1 22 4
1_A -1 10 11
1_B 2 15 9
1_B 6 15 2
1_A 2 33 43
1_A 5 50 22
1_A 3 5 122
1_B 1 30 8
1_A 4 1 2
对于数据处理,我需要按组计算 v1 order 的累积总和,它是针对具有相同 key 的行。所以我想我应该先点桌子。但我不确定。请建议。如果我需要先订购桌子,新桌子如下所示。基本上,我将具有相同键的行放在一起,并按组对这些行进行排序。
key group v1 v2
1_A -1 10 11
1_A 1 22 4
1_A 2 33 43
1_A 3 5 122
1_A 4 1 2
1_A 5 50 22
1_B 1 30 8
1_B 2 15 9
1_B 6 1 2
这是我想要的输出。主要是我需要按组的顺序做v1的累积和,一旦累积和达到阈值,这里说30,累积停止,下一行重新开始。这个过程一直持续到它到达同一组的最后一行。最后,如果最后一个 bin(s) 小于 30,则将它们与较低的 bin(s) 组合,如 1_B 所示,其中第 2 组和第 6 组加起来只有 16 (<30),所以他们需要与第 1 组相结合。
请注意,bin 编号可能与我在这里的不同。只要它为同一组提供相同的 bin 编号,它就可以工作。例如,您可以将 1,2,3 完全替换为 A,B,C,或 3,2,1,或 A100,B201,M434。
key group v1 v2 bin sum_v1 sum_v2
1_A -1 10 11 1 32 15
1_A 1 22 4 1 32 15
1_A 2 33 43 2 33 43
1_A 3 5 122 3 56 146
1_A 4 1 2 3 56 146
1_A 5 50 22 3 56 146
1_B 1 30 8 1 46 19
1_B 2 15 9 1 46 19
1_B 6 1 2 1 46 19
编辑: 现在我在下面发布了一个完整的解决方案作为答案。享受。