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

Python行迭代实现:标记库存增加周数的双重迭代需求

解决商品库存周增长标记的双重迭代问题

嘿,作为Python新手碰到这种需要先按商品遍历、再按周遍历的需求确实容易懵,我来一步步帮你搞定这个库存增长标记的任务!

先明确需求和数据样例

首先咱们对齐下需求:

  • 先按商品编号分组,把同一个商品的所有周数据放在一起
  • 对每个商品的周数据,从第二周开始,对比当前周和上周的库存:如果当前周库存 > 上周,标记为1;否则标记为0(第一周因为没有上周数据,默认标记0)

假设你的原始数据样例是这样的(模拟表格形式):

商品编号周数库存
A0011100
A0012150
A0013140
A002180
A002280
A002390

期望的输出样例会新增一列标记:

商品编号周数库存库存增加标记
A00111000
A00121501
A00131400
A0021800
A0022800
A0023901

方法一:纯Python基础实现(适合理解双重迭代逻辑)

这个方法不用额外库,帮你彻底搞懂“先遍历商品、再遍历周数”的双重迭代逻辑:

# 模拟你的原始数据,每个元素是(商品编号, 周数, 库存)
inventory_data = [
    ("A001", 1, 100),
    ("A001", 2, 150),
    ("A001", 3, 140),
    ("A002", 1, 80),
    ("A002", 2, 80),
    ("A002", 3, 90),
]

# 第一步:按商品编号分组,把同一个商品的周数据收集到一起
grouped_products = {}
for item in inventory_data:
    product_id, week, stock = item
    # 如果商品还没在分组字典里,先创建一个空列表
    if product_id not in grouped_products:
        grouped_products[product_id] = []
    # 把当前周的数据加入对应商品的列表
    grouped_products[product_id].append((week, stock))

# 重要!确保每个商品的周数据是按周数从小到大排序的(防止原始数据乱序)
for product_id in grouped_products:
    grouped_products[product_id].sort(key=lambda x: x[0])

# 第二步:双重迭代生成标记
final_result = []
# 第一层迭代:遍历每个商品
for product_id, weekly_stocks in grouped_products.items():
    # 处理第一个周:没有上周数据,标记为0
    first_week, first_stock = weekly_stocks[0]
    final_result.append((product_id, first_week, first_stock, 0))
    
    # 第二层迭代:从第二个周开始,和上周库存对比
    for i in range(1, len(weekly_stocks)):
        current_week, current_stock = weekly_stocks[i]
        last_week, last_stock = weekly_stocks[i-1]
        # 判断库存是否增长,生成标记
        increase_flag = 1 if current_stock > last_stock else 0
        final_result.append((product_id, current_week, current_stock, increase_flag))

# 打印结果
for row in final_result:
    print(row)

运行后会输出:

('A001', 1, 100, 0)
('A001', 2, 150, 1)
('A001', 3, 140, 0)
('A002', 1, 80, 0)
('A002', 2, 80, 0)
('A002', 3, 90, 1)

方法二:用Pandas高效实现(适合处理大量数据)

如果你的数据量比较大,用Pandas会更简洁高效,也是实际工作中常用的方式:

import pandas as pd

# 把原始数据转成DataFrame(模拟你的表格数据)
df = pd.DataFrame({
    "商品编号": ["A001", "A001", "A001", "A002", "A002", "A002"],
    "周数": [1, 2, 3, 1, 2, 3],
    "库存": [100, 150, 140, 80, 80, 90]
})

# 核心操作:按商品分组,计算库存的周差值,然后生成标记
df["库存增加标记"] = (
    df.groupby("商品编号")["库存"]  # 按商品分组
    .diff()  # 计算当前周和上周的库存差值
    .fillna(0)  # 第一周的差值是NaN,填充为0
    .apply(lambda x: 1 if x > 0 else 0)  # 差值>0标记1,否则0
)

# 查看最终结果
print(df)

运行后会直接得到带标记列的表格,和咱们期望的输出样例完全一致。

新手注意事项

  • 一定要保证周数据有序:不管用哪种方法,都要确保同一个商品的周数是按从小到大排列的,不然对比的就不是“上周”了,结果会出错!
  • 第一周的标记规则:如果你的需求里第一周需要特殊处理(比如标记为NaN或者其他值),可以直接修改代码里的对应部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:36