我可以以某种方式在 Pandas 中分组应用增量值吗?

Can I somehow apply incremental values in groups, in Pandas?

如果我在 Pandas 中有一个大数据框,假设 df:

item_serial_number, barcode
12312313-123123123  ABC
12312313-123123124  ABC
...
44312313-123123125  DEF
55512313-123123126  DEF

此 df 列出了具有不同物理尺寸的设备。因此,每种设备 ABC 或 DEF 的不同 数量 适合其类型的盒子。

我在数据框 bf 中列出了多少种设备适合它们的盒子:

barcode, items_per_box
ABC   3
DEF   2
...

我需要将每个设备分配到一个编号的盒子中,并根据它们的大小进行包装。 所以每三个 ABC 项目应该进入相同的框号,下一个进入下一个框号,等等。每 2 个 DEF 项目应该进入相同的框号,依此类推。

所以最终结果应该是:

item_serial_number, barcode, box_number
12312313-123123123  ABC   1
12312313-123123124  ABC   1
12312313-123123128  ABC   1
12312313-123123121  ABC   2
12312313-123123101  ABC   2
12312313-123123121  ABC   2
12312313-123123125  ABC   3
...
44312313-123123125  DEF   1
55512313-123123126  DEF   1
12312313-123125123  DEF   2
12312313-123126124  DEF   2
12312313-123127123  DEF   3
12312313-123128124  DEF   3

目前我有一个 for 循环遍历 boxf 的条形码并通过 df 的另一个循环应用每个数字。

是否可以使用 pandas .apply 或类似函数优雅地完成它,或者我是否坚持在每个条形码上循环一些 for 循环?我环顾四周,但也许我想不出正确的措辞,因为我没有发现这个问题的重复项。

我想这就是你要找的:

df['box_number'] = df.groupby('barcode').cumcount().floordiv(df['barcode'].map(bf.set_index('barcode')['items_per_box'].to_dict()),axis=0).add(1)