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

如何在R中拆分行数不均的长列并命名列 处理门店嵌套库存数据

单列嵌套库存数据转门店宽表实现方案

需求说明

你现有的数据为单列存储的多门店库存信息,规则如下:

  • 每个商品固定包含9项属性,顺序为:No(编号)、Item(商品名)、规格、Expiry Date(有效期)、Manufacturer(生产商)、Quantity(数量)、Unit Price(单价)、Discount(折扣)、Total Price(总价)
  • 商品编号回到1时代表切换到下一家门店,最终需要将同一家门店的所有商品信息横向排列,单店对应一行输出

实现方案

方案1:Excel Power Query 零代码实现

适合少量数据、不会代码的用户,操作步骤如下:

  1. 把原始单列数据导入Excel,选中整列后点击「数据」选项卡→「从表格/范围」进入Power Query编辑器
  2. 新增索引列:点击「添加列」→「索引列」→选择从0开始
  3. 标记商品分组:新增自定义列,公式输入Number.IntegerDivide([索引],9),得到每个商品对应的分组ID
  4. 标记属性位置:新增自定义列,公式输入Number.Mod([索引],9),0到8依次对应9项商品属性
  5. 透视属性列:选中「属性位置」列,点击「转换」→「透视列」,值选择原始数据列,聚合方式选「不要聚合」
  6. 标记门店ID:新增自定义列,公式输入if [No] = "1" then [商品分组ID] else null,右键点击门店ID列选择「填充」→「向下」
  7. 按门店ID分组:选中「门店ID」列,点击「转换」→「分组依据」,操作选择「所有行」
  8. 展开分组后的表,将同门店的多组商品属性横向拼接,重命名列后导出即可得到目标宽表

方案2:Python 脚本批量处理

适合数据量较大、需要重复处理的场景,代码如下:

import pandas as pd

# 1. 读取原始单列数据,假设数据存放在stock.txt中,每行一个值
with open('stock.txt', 'r', encoding='utf-8') as f:
    lines = [line.strip() for line in f.readlines() if line.strip()]

# 2. 按9行一组拆分每个商品的属性
goods_list = []
for i in range(0, len(lines), 9):
    goods = lines[i:i+9]
    goods_list.append({
        'No': goods[0],
        'Item': goods[1],
        'Size': goods[2],
        'Exp': goods[3],
        'Manuf': goods[4],
        'Qty': goods[5],
        'Unit': goods[6],
        'Dis': goods[7],
        'Total': goods[8]
    })

# 3. 按门店分组,遇到No=1就新建门店行
shop_rows = []
current_shop = []
for goods in goods_list:
    if goods['No'] == '1' and current_shop:
        # 把当前门店的所有商品属性横向拼接成一行
        shop_row = {}
        for idx, g in enumerate(current_shop):
            suffix = f"_{idx+1}" if idx >0 else ""
            for k, v in g.items():
                shop_row[f"{k}{suffix}"] = v
        shop_rows.append(shop_row)
        current_shop = []
    current_shop.append(goods)
# 补充最后一个门店的数据
if current_shop:
    shop_row = {}
    for idx, g in enumerate(current_shop):
        suffix = f"_{idx+1}" if idx >0 else ""
        for k, v in g.items():
            shop_row[f"{k}{suffix}"] = v
    shop_rows.append(shop_row)

# 4. 导出为Excel
result = pd.DataFrame(shop_rows)
result.to_excel('门店库存宽表.xlsx', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:48:01