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

按日级分配箱容量:基于DataFrame优先级与日容量的实现问题

解决方案

需求分析

按Preference优先级(数值越小优先级越高),将每个Box的box_cap分配到每日的Capacity中,每日容量耗尽后自动转到下一天,直到所有Box的容量全部分配完成。

数据初始化

先定义示例DataFrame:

import pandas as pd

df_box = pd.DataFrame({
    'Box': [1, 2, 3],
    'box_cap': [16, 16, 15],
    'size': [1200, 1550, 1300],
    'Preference': [1, 2, 3]
})

df_day = pd.DataFrame({
    'Day': [1, 2],
    'Capacity': [23, 24]
})

实现代码

# 按优先级排序,确保高优先级箱先分配
df_box_sorted = df_box.sort_values('Preference').reset_index(drop=True)

# 跟踪每日剩余可分配容量
day_remaining = df_day.set_index('Day')['Capacity'].copy()

# 存储分配结果
result = []

# 遍历每个箱
for _, box_row in df_box_sorted.iterrows():
    box_id = box_row['Box']
    left_box_cap = box_row['box_cap']
    
    # 遍历还有剩余容量的天数
    for day in day_remaining[day_remaining > 0].index:
        if left_box_cap <= 0:
            break
        
        # 计算本次分配量:取当日剩余容量与箱剩余容量的最小值
        allocate = min(day_remaining[day], left_box_cap)
        
        # 记录分配记录
        result.append({
            'Day': day,
            'Box': box_id,
            'box_cap': allocate
        })
        
        # 更新剩余容量
        day_remaining[day] -= allocate
        left_box_cap -= allocate

# 转为结果DataFrame
df_result = pd.DataFrame(result)
print(df_result)

代码说明

  1. 排序处理:先对箱按Preference升序排序,保证优先级高的箱优先分配,符合需求逻辑。
  2. 剩余容量跟踪:用day_remaining变量单独跟踪每日剩余可分配容量,避免修改原始数据。
  3. 分配逻辑:对每个箱,遍历仍有剩余容量的天数,每次分配尽可能多的容量(要么耗尽当日容量,要么耗尽箱的剩余容量),同时更新双方的剩余值,直到箱的容量全部分配完成。
  4. 结果收集:将每次分配的记录存入列表,最后转为DataFrame得到目标输出。

输出验证

运行代码后得到的结果与需求完全一致:

Day  Box  box_cap
0    1    1       16
1    1    2        7
2    2    2        9
3    2    3       15

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:12:47