python - 如果还没有在 DF 中两次,则按照策略将行附加到 DF
问题描述
问题
如果该行的每个 ID 的标准是该行的 ID row 在该df中还没有两次,并且ID应该遵循某种策略(例如,可能的最低数字)?
语境
仓库中的一个隔间最多可容纳两种不同的物品。该位置由 locationID (A115.14604A0) 给出,我可以将其拆分为塔 (A)、楼层 (11)、过道 (5)、立柱 (146)、架子 (04),最后是隔间 (A0)。当一个项目存在时,我只得到一行。例子:
Date item ID location_id ean quantity volume total v
0 2020-08-17 9200000074604211 A115.14604A0 7710958034710 1 820000 820000.0
1 2020-08-17 9200000122486821 A123.12702E1 2407047440917 2 450000 900000.0
所以当数量为 0 时永远不会有一条线。因此并非所有位置都可以被 DF 本身“循环”(尽管我认为这不是一个好的解决方案)。
我需要用新项目“填充”这个 df,但我不必在原始库存文件中添加/更改数字,只需附加新行。因此项目将始终形成一个新行,但最多可以有两次相同的位置 ID。这种格式需要保持不变。
我想到的策略:
原计划在唯一的Item_ID上按库存分组,创建列(nr_unique)与DF的空模板连接,以获得所有位置(如果不匹配,nr_unique = 0) For loop over Tower (A), floor (11),过道 (5)、立柱 (146)、架子 (04),最后是隔间,遵循一定的逻辑(例如从最低的塔开始)。如果一个位置的数量 < 1,则在原始库存文件中添加一个新行。对每组新的 (35) 个项目重复此操作 (1000 次)。
不是pythonic,更聪明一点
对于塔 (A)、楼层 (11)、过道 (5)、立柱 (146)、架子 (04) 以及最后的隔间,按照一定的逻辑(例如从最低的塔开始)循环。如果不在 DF 中,则创建(连接)& 追加,如果只有一次在 DF 中,则创建(连接)& 追加,如果在 DF 中两次或更多,则继续循环。
对每组新的 (35) 个项目重复 (1000 次)。
- 哑矢量化方法
在唯一的Item_ID上按库存分组,创建列(nr_unique)与DF的空模板连接,以获取所有位置(如果不匹配,nr_unique = 0)获取N <2的所有行 根据策略选择x行(对于过道最低的实例)对于我原来的 DF,选择那些行。将 1 添加到所有这些(如果您希望所有内容都完全填充为 2,则循环它们)
对每组 (35) 个项目重复 (1000 次)。
- ???必须有更聪明的方法来做到这一点?
评估
我真的倾向于 1 但无论我在哪里看到人们都警告我循环数据帧。这需要每次循环遍历所有项目。因此它会很慢。我正在寻找的是一种在 pythonic 问题中向我的 df 添加行的方法。
问候,查尔斯
解决方案
我最终创建了一个生成单独隔间的类,每个隔间都装满了物品和卷。
推荐阅读
- .net - Azure WebJobs 中的 EventStore C# 客户端
- jupyter-notebook - Jupyter Notebook SPSS 集成
- c# - 如果发生异常,如何使文件流重新读取一行?
- javascript - 维护在线用户数 Socket.io NodeJS
- visual-studio-code - 更改未使用变量/导入的颜色
- odoo - 从odoo中的只读字段中保存值
- php - 在 Joomla 中提交后获取表单字段
- python - upsert 到 Postgres 处理报价
- automated-tests - SheetCommandBase.java:152 处的 Fitnesse NullPointer
- python - 从文档中删除所有信息,但保留它的 ObjectId,mongoengine