You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何依据Series数值将DataFrame数据按固定间隔分组

按型号批次分箱实现方案

原始数据

1. 批次数据DataFrame(df1)

df1 = pd.DataFrame({'model':['A','A','A','A','A','B','B','B','B','C','C','C','C','C'],
            'lot':['a1','a2','a3','a4','a5','b1','b2','b3','b4','c1','c2','c3','c4','c5']})

对应数据结构:

modellot
Aa1
Aa2
Aa3
Aa4
Aa5
Bb1
Bb2
Bb3
Bb4
Cc1
Cc2
Cc3
Cc4
Cc5

2. 箱容量Series(s1)

s1 = pd.Series({'A':3, 'B':2,'C':4}, name='box_volume')

对应数据:

modelbox_volume
A3
B2
C4

分箱规则

  • 同型号批次按对应箱容量依次装箱,装满一个箱后启用下一个新箱
  • 型号切换时重新开始计数装箱,全局箱号按顺序延续

具体示例:

  • 型号A共5个批次,箱容量3,对应box_1(装a1、a2、a3)和box_2(装a4、a5)
  • 型号B共4个批次,箱容量2,对应box_3(装b1、b2)和box_4(装b3、b4)
  • 型号C共5个批次,箱容量4,对应box_5(装c1、c2、c3、c4)和box_6(装c5)

实现代码

import pandas as pd

# 加载原始数据
df1 = pd.DataFrame({'model':['A','A','A','A','A','B','B','B','B','C','C','C','C','C'],
            'lot':['a1','a2','a3','a4','a5','b1','b2','b3','b4','c1','c2','c3','c4','c5']})
s1 = pd.Series({'A':3, 'B':2,'C':4}, name='box_volume')

# 合并箱容量信息到批次数据
df = df1.merge(s1, on='model', how='left')

# 按型号分组,计算每个批次在当前型号内的箱序号
df['box_num_in_model'] = df.groupby('model').cumcount() // df['box_volume'] + 1

# 计算各型号的总箱数,再推导全局箱号
model_box_counts = df.groupby('model').apply(lambda x: (x['lot'].count() + x['box_volume'].iloc[0] - 1) // x['box_volume'].iloc[0])
cum_box_counts = model_box_counts.cumsum().shift(fill_value=0)
df['box_id'] = 'box_' + (df['model'].map(cum_box_counts) + df['box_num_in_model']).astype(str)

# 整理最终结果
result = df[['model', 'lot', 'box_id']]
print(result)

最终结果

modellotbox_id
Aa1box_1
Aa2box_1
Aa3box_1
Aa4box_2
Aa5box_2
Bb1box_3
Bb2box_3
Bb3box_4
Bb4box_4
Cc1box_5
Cc2box_5
Cc3box_5
Cc4box_5
Cc5box_6

内容的提问来源于stack exchange,提问作者ghost_like

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:28:21