首页 > 解决方案 > 如果还没有在 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。这种格式需要保持不变。

我想到的策略:

  1. 原计划在唯一的Item_ID上按库存分组,创建列(nr_unique)与DF的空模板连接,以获得所有位置(如果不匹配,nr_unique = 0) For loop over Tower (A), floor (11),过道 (5)、立柱 (146)、架子 (04),最后是隔间,遵循一定的逻辑(例如从最低的塔开始)。如果一个位置的数量 < 1,则在原始库存文件中添加一个新行。对每组新的 (35) 个项目重复此操作 (1000 次)。

  2. 不是pythonic,更聪明一点

对于塔 (A)、楼层 (11)、过道 (5)、立柱 (146)、架子 (04) 以及最后的隔间,按照一定的逻辑(例如从最低的塔开始)循环。如果不在 DF 中,则创建(连接)& 追加,如果只有一次在 DF 中,则创建(连接)& 追加,如果在 DF 中两次或更多,则继续循环。

对每组新的 (35) 个项目重复 (1000 次)。

  1. 哑矢量化方法

在唯一的Item_ID上按库存分组,创建列(nr_unique)与DF的空模板连接,以获取所有位置(如果不匹配,nr_unique = 0)获取N <2的所有行 根据策略选择x行(对于过道最低的实例)对于我原来的 DF,选择那些行。将 1 添加到所有这些(如果您希望所有内容都完全填充为 2,则循环它们)

对每组 (35) 个项目重复 (1000 次)。

  1. ???必须有更聪明的方法来做到这一点?

评估

我真的倾向于 1 但无论我在哪里看到人们都警告我循环数据帧。这需要每次循环遍历所有项目。因此它会很慢。我正在寻找的是一种在 pythonic 问题中向我的 df 添加行的方法。

问候,查尔斯

标签: pythonpandasdataframeloopsappend

解决方案


我最终创建了一个生成单独隔间的类,每个隔间都装满了物品和卷。


推荐阅读