【发布时间】:2020-12-06 16:35:40
【问题描述】:
我有兴趣对以下数据框进行部分求和:
ID Name A B
1 111 foo 248 123
2 222 bar 331 94
3 111 foo 266 102
4 111 foo 217 163
5 222 bar 194 102
6 222 bar 188 89
我可以将groupby 与sum 或agg 一起使用,例如:
df = df.groupby(["ID", "Name"]).agg(sum).reset_index()
产生:
ID Name A B
1 111 foo 731 388
2 222 bar 713 285
但是,我只想在 A 列通过某个预先指定的值之前合并索引,然后开始第二次分组。当那个通过预先指定的值时,开始第三个分组,依此类推。例如,如果阈值设置为 500,则代码将产生:
ID Name A B
1 111 foo 514 225
2 222 bar 525 196
3 111 foo 217 163
4 222 bar 188 89
原始 df 中的第 1 行和第 3 行被分组。第 2 行和第 4 行被分组。第 5 行不与第 1 行和第 3 行分组,因为已超过 500 的阈值。第 6 行同样未分组。
行的顺序无关紧要。哪些行与哪些其他行结合并不重要。我只需要使用阈值对列值进行分组的能力。我很难过,尤其是在试图找出 Pythonic 解决方案而不是逐行遍历数据帧并显式评估每一行时。任何反馈将不胜感激。
【问题讨论】:
-
我认为循环对于这样的计算是必要的。这里有很多有用的信息:stackoverflow.com/questions/56904390/…
-
非常有用,尤其是因为我不了解 Numba。非常感谢!