首页 > 解决方案 > 熊猫有没有办法根据一列中的数量对数据框中的行进行分组?

问题描述

想象一下,我有一个这样的数据框:

ID 数量
AAA 10
BBB 30
CCC 30
DDD 10
电子电气设备 20

有没有办法添加一个“组”列,以便我可以创建类似数量的组?

就像,如果我想要数量总和约为 50 的组(不必精确):

ID 数量 团体
AAA 10 1
BBB 30 1
CCC 30 2
DDD 10 1
电子电气设备 20 2

或数量总和约为 30 的组:

ID 数量 团体
AAA 10 1
BBB 30 2
CCC 30 3
DDD 10 1
电子电气设备 20 1

我有非常大量的数据,我想分批处理,但需要确保每批中数量列的总和大致相等。

我希望这个问题是相当清楚的。非常感谢您提前。

标签: pythonpandasdataframe

解决方案


正如我在上面的评论中指出的那样,我完全想多了,但这里的评论真的帮助了我。

我有一个包含 55,000 个类别的 150,000,000 个事件的数据集。我需要分批处理这些数据,但我必须确保一个类别中的所有事件都在同一个批次中处理(尽管一个批次可以包含多个类别。)

如原始问题所述,我有一个按类别分组的事件数据框,其中包含三列:idcategoryevent_countevent_count只是特定类别中所有事件行的总和。

最后我只写了一个糟糕的 Python 循环,将类别添加到一个组中,直到该组中的 event_count 总和 > 1,500,000(将数据集分成 100 个组的任意数字)。

group_counter = 1
event_counter = 0
for i in event.index:
  event_counter += event.loc[i, "event_count"]
  if event_counter < 1500000:
    event.loc[i, "category"] = int(group_counter)
  else:
    event_counter = row.event_count
    group_counter += 1
    event.loc[i, "category"] = int(group_counter)

超级愚蠢,可能有一百万种更好的方法可以做到,但这正是我所需要的。

我想多了,多背包问题的提醒是一个完美的推动。


推荐阅读