如何用Pandas的explode函数将行拆分为多行并均分量到三班次
用Pandas实现产量按班次拆分的高效方法
完全可以用explode替代低效的iterrows()循环,步骤简单直接:
- 先给每行添加包含三个班次的列表列
- 用
explode拆分列表为独立行 - 计算每班均分后的产量
代码实现
import pandas as pd # 原始数据 df = pd.DataFrame({ 'product#': [1, 1, 2], 'day': ['Jan 1', 'Jan 2', 'Jan 2'], 'quantity': [30, 30, 60] }) # 1. 给每行添加班次列表 df['shift'] = [[1,2,3]] * len(df) # 2. 拆分列表为多行 df = df.explode('shift') # 3. 计算每班产量 df['quantity'] = df['quantity'] / 3 # 可选:重置索引让结果更规整 df = df.reset_index(drop=True) print(df)
运行结果
| product# | day | quantity | shift | |
|---|---|---|---|---|
| 0 | 1 | Jan 1 | 10.0 | 1 |
| 1 | 1 | Jan 1 | 10.0 | 2 |
| 2 | 1 | Jan 1 | 10.0 | 3 |
| 3 | 1 | Jan 2 | 10.0 | 1 |
| 4 | 1 | Jan 2 | 10.0 | 2 |
| 5 | 1 | Jan 2 | 10.0 | 3 |
| 6 | 2 | Jan 2 | 20.0 | 1 |
| 7 | 2 | Jan 2 | 20.0 | 2 |
| 8 | 2 | Jan 2 | 20.0 | 3 |
补充说明
- 这种向量化操作比
iterrows()循环效率高得多,数据量越大优势越明显 - 如果需要整数类型的产量,可替换为
df['quantity'] = df['quantity'] // 3或(df['quantity'] / 3).astype(int)
内容的提问来源于stack exchange,提问作者inzikind
相关产品推荐
相关产品推荐

