我可以以某种方式在 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)
如果我在 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)