我对python或pandas编码非常陌生。所以我在这里有点震惊,任何意见都很感谢。 我有两个df,分别根据标准订购。 df1:包含数量的订单列表 df2:具有可用数量和日期的存货清单。数量不一定等于订单数量
我需要在df1中弹出第一个订单,并在df2中不断弹出库存,直到满足订单数量,并保持完成订单所需的库存数量
任何帮助都将不胜感激
Example
df 1:
order1 5
order2 4
order3 5
df 2: inventories
inven1 7 07/06/2020
inven2 7 07/10/2020
my final output should look like this.
inven1 | 5 | 07/06/2020 | order1
inven1 | 2 | 07/06/2020 | order2
inven2 | 2 | 07/10/2020 | order2
inven2 | 5 | 07/10/2020 | order3
@Ian 感谢您的回答,它工作得非常好,我唯一的问题是,这些库存和订单必须基于metaID进行匹配,metaID中的库存应该应用于相同metaID的订单
我尝试通过metaID循环并执行订单库存匹配,如下所示。我得到了我想要的结果,但最大的问题是,仅2K行的数据大小需要20分钟
我试图通过按metaID对订单和库存进行排序并传递整个数据帧来解决这个问题。当订单和库存有精确匹配的计数时,它就起作用了
df 1:
metaId1 order1 5
metaId1 order2 4
metaId1 order3 5
metaId2 order4 10
df 2: inventories
metaId1 inven1 7 07/06/2020
metaId1 inven2 7 07/10/2020
metaId2 inven3 10 07/10/2020
my final output is all fine.
metaId1 | inven1 | 5 | 07/06/2020 | order1
metaId1 | inven1 | 2 | 07/06/2020 | order2
meatId1 | inven2 | 2 | 07/10/2020 | order2
metaId1 | inven2 | 5 | 07/10/2020 | order3
metaId2 | inven3 | 10 | 07/10/2020 | order4
但metaId之间的交叉发生在库存过剩或短缺时,因为我们是基于索引进行匹配的。如何基于metaId进行匹配,然后在其中通过索引进行匹配。我使用的for-loop解决方案需要花费大量数据,我知道这不是正确的解决方案。每个metaId下的顺序匹配可以并行进行,并且可以合并结果。这就是我使用for循环的方式。我不知道如何在python/pandas中并行化它们,或者不知道有比并行计算更好的解决方案。看起来我需要应用groupBy apply combine概念,但是我看到了这个概念的示例,使用单个数据帧,并对该行应用一些逻辑,然后组合它。我的问题是,我有两个数据帧,必须分组,并将“combine-first()”解决方案应用于该组,并合并每个组的结果。我不知道怎么做。你能帮我吗
current problem
df 1:
metaId1 order1 5
metaId1 order2 4
metaId1 order3 5
metaId2 order4 10
df 2: inventories
metaId1 inven1 7 07/06/2020
metaId1 inven2 5 07/10/2020
metaId2 inven3 10 07/10/2020
final output : --> not right
metaId1 | inven1 | 5 | 07/06/2020 | order1
metaId1 | inven1 | 2 | 07/06/2020 | order2
meatId1 | inven2 | 2 | 07/10/2020 | order2
metaId1 | inven2 | 3 | 07/10/2020 | order3
metaId2 | inven3 | 2 | 07/10/2020 | order3 -->crossover
metaId2 | inven3 | 8 | 07/10/2020 | order4
expected output :
metaId1 | inven1 | 5 | 07/06/2020 | order1
metaId1 | inven1 | 2 | 07/06/2020 | order2
meatId1 | inven2 | 2 | 07/10/2020 | order2
metaId1 | inven2 | 3 | 07/10/2020 | order3
metaId1 | short | 2 | 07/10/2020 | order3-->short by 2 inven to fulfill order
metaId2 | inven3 | 10 | 07/10/2020 | order4
创建df1:
从order 1=5开始,在一行中创建[order 1,order 1,order 1,order 1,order 1]的5个Elmenet。与订单2和订单3相同
创建df2:
从inven1=7,在一行中创建[inven1,inven1,inven1,inven1,inven1,inven1]的7个元素。与inven2相同
创建df3:
将所有订单放在一列中,将所有inven1放在另一列中,以使它们一一对应
确保在订单下更换NAs,以确定哪些库存没有匹配的订单号
创建df4:
使用groupby创建一个数据透视表,显示按库存填写的每个订单的计数
结果应显示:
资料来源:
相关问题 更多 >
编程相关推荐