python - 熊猫有没有办法根据一列中的数量对数据框中的行进行分组?
问题描述
想象一下,我有一个这样的数据框:
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 |
我有非常大量的数据,我想分批处理,但需要确保每批中数量列的总和大致相等。
我希望这个问题是相当清楚的。非常感谢您提前。
解决方案
正如我在上面的评论中指出的那样,我完全想多了,但这里的评论真的帮助了我。
我有一个包含 55,000 个类别的 150,000,000 个事件的数据集。我需要分批处理这些数据,但我必须确保一个类别中的所有事件都在同一个批次中处理(尽管一个批次可以包含多个类别。)
如原始问题所述,我有一个按类别分组的事件数据框,其中包含三列:id
、category
、event_count
。event_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)
超级愚蠢,可能有一百万种更好的方法可以做到,但这正是我所需要的。
我想多了,多背包问题的提醒是一个完美的推动。
推荐阅读
- authentication - blazor webassembly .net 5.0 注销服务工作者
- python - Django 中的链式下拉菜单未将数据存储到数据库(Postgresql)
- javascript - 一旦用户输入值,使用 javascipt/jquery 自动更新具有相同 ID 的输入字段
- go - 如何使golang标准化具有多种编码方式的unicode字符串?
- sql - 需要查询以下逻辑以在表中添加新列
- installation - 我正在尝试在我的 Mac 上安装 civicrm,但在第 5 步中出现错误
- python - Python api statsmodels.tsa.arima.model.ARIMA v0.12.2 对Integration (d) ARIMA 参数变化的错误响应
- sql - SQL Server 复制中的内存映射文件写入失败
- rust - Rust 中隐藏的代理和实现模式?
- java - 在 Android 中共享自定义文本