如何从另一个数据框中获取适当的类别 - 一对多匹配

问题描述 投票:0回答:0

我们有**两台机器**,每台机器都在生产不一致的数量df1 是它的数据框

df1 = pd.DataFrame({'machine':['A','A','A','A','A','B','B','B','B','B','B'],'qty':[1,3,5,2,4,2,4,5,5,3,2]})

[df1]

df2 是盒子体积大小的数据框,也是每个体积大小不同的大小

df2 = pd.DataFrame({'machine':['A','A','A','A','A','B','B','B','B','B','B','B'],
                    'box_id':['box_1','box_2','box_3','box_4','box_5','box_6','box_7','box_8','box_9','box_10','box_11','box_12'],
                    'volume':[4,5,3,2,5,3,4,3,6,4,8,5]})

[df2]

我想向df1添加“box_id”列以查找并匹配df2适当的框ID。 就像底部的输出数据框一样。

output_df = pd.DataFrame({'machine':['A','A','A','A','A','B','B','B','B','B','B'],
                           'qty':[1,3,5,2,4,2,4,5,5,3,2],
                           'box_id':['box_1','box_1','box_2','box_3','box_5','box_6','box_7','box_9','box_11','box_12','box_12']})

[output_df]

详细解释

从上往下依次添加box_id以**接近每个box体积**(df2)但不超过每个box

例如, 在机器 A 中,第一个产品数量为 1,但第一个盒子 (box_1) 的体积为 4 box_1可以包含第一个产品,第一列的box ID是box_1

然后第二个产品数量是 3, box_1 有第一个产品(数量 1),但该盒子中有 3 个可用空间 第二行**中的box ID也是box_1 ** 第三个产品是 5,下一个盒子(box_2)的体积也是 5,所以 第三行是 box_2 第四个产品是2,下一个盒子(box_3)体积是3,所以第三行是box_3 ** 但是在第五种情况下,product 是 4,但是下一个 box(box_4) 只有 2, 所以 box_4不能用,必须用下面的box_5 ** 换机时,再次重置盒子,使用下一个盒子。

在机器 B 中,第一个产品数量为 2,但下一个盒子(box_6)的体积为 3 所以可以使用 box_6

不是为了学习,其实我们厂是这样生产的。 我要用这个做部分自动化

希望专家多多帮助

python pandas match
© www.soinside.com 2019 - 2024. All rights reserved.