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

如何自动化重构存在嵌套行的大型数据集

解决方案:将嵌套行结构的CSV转换为宽格式

以下提供几种可行的方案,覆盖Python、SQL和Excel Power Query三种工具,按需选择:

方案一:Python(灵活高效,适合大规模数据)

用Python的pandas库可以快速处理这种行关联转换,步骤如下:

  1. 安装pandas(如果没装):
pip install pandas
  1. 先把CSV文件下载到本地,然后运行以下代码:
import pandas as pd

# 读取本地CSV文件,替换成你的实际文件路径
df = pd.read_csv("原数据.csv")

# 标记主数据行(Name列非空的行)
df['is_main'] = df['Name'].notna()

# 给每个主行分配组ID,向下填充组ID到后续子行
df['group_id'] = df['is_main'].cumsum()

# 按组分组,将Spawn Weighting列转成宽格式
wide_df = df.groupby('group_id').agg(
    Name=('Name', 'first'),
    Lvl=('Lvl', 'first'),
    Stats=('Stats', 'first'),
    Tier=('Tier', 'first'),
    Weight1=('Spawn Weighting', lambda x: x.iloc[0] if len(x)>=1 else None),
    Weight2=('Spawn Weighting', lambda x: x.iloc[1] if len(x)>=2 else None),
    Default=('Spawn Weighting', lambda x: x.iloc[2] if len(x)>=3 else None)
).reset_index(drop=True)

# 保存为新CSV
wide_df.to_csv("转换后的宽格式.csv", index=False)

这段代码会自动把每个主行下面的子行Spawn Weighting值依次放到Weight1、Weight2、Default列,完全匹配你要的格式。

方案二:SQL(适合熟悉数据库的场景)

以SQLite为例(无需额外安装数据库服务),步骤如下:

  1. 把CSV文件下载到本地,导入SQLite数据库:

    • 用SQLiteStudio或命令行工具创建数据库,导入CSV时注意保留所有列,添加一个自增的row_num列(用来标记行顺序)。
  2. 执行以下SQL查询(替换your_table_name为你的表名):

WITH ranked_rows AS (
    -- 标记每个主行的起始位置,给每个组分配ID
    SELECT 
        *,
        SUM(CASE WHEN Name IS NOT NULL THEN 1 ELSE 0 END) OVER (ORDER BY row_num) AS group_id
    FROM your_table_name
),
grouped_weights AS (
    -- 给每个组内的子行编号(1、2、3)
    SELECT 
        group_id,
        "Spawn Weighting" AS weight_value,
        ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY row_num) AS weight_rank
    FROM ranked_rows
)
-- 把多行的权重转成列,和主行合并
SELECT 
    r.Name,
    r.Lvl,
    r.Stats,
    r.Tier,
    MAX(CASE WHEN g.weight_rank=1 THEN g.weight_value END) AS Weight1,
    MAX(CASE WHEN g.weight_rank=2 THEN g.weight_value END) AS Weight2,
    MAX(CASE WHEN g.weight_rank=3 THEN g.weight_value END) AS Default
FROM ranked_rows r
LEFT JOIN grouped_weights g ON r.group_id = g.group_id
WHERE r.Name IS NOT NULL  -- 只保留主行
GROUP BY r.group_id, r.Name, r.Lvl, r.Stats, r.Tier
ORDER BY r.row_num;

执行后导出结果即可得到宽格式数据。

方案三:Excel Power Query(无需编程,适合Excel用户)

如果不想写代码,用Excel自带的Power Query可以可视化完成转换:

  1. 把CSV文件下载到本地,打开Excel,点击「数据」选项卡 → 「获取数据」→ 「从文件」→ 「从CSV」,选择你的CSV文件导入。

  2. 在Power Query编辑器中:

    • 点击「添加列」→ 「索引列」→ 「从1开始」。
    • 添加自定义列,标记主行:输入公式= if [Name] <> null then 1 else 0,命名为IsMain。
    • 添加自定义列,生成组ID:输入公式= List.Sum(List.Range(#"添加的索引"[IsMain],0,[索引])),命名为GroupID。
    • 选中Name、Lvl、Stats、Tier列,右键 → 「填充」→ 「向下」,把主行信息填充到子行。
    • 点击「转换」选项卡 → 「分组依据」,分组列选GroupID,操作选「所有行」,新列名设为Rows。
    • 点击Rows列标题旁的箭头,只勾选「Spawn Weighting」后展开;展开后再次点击列标题箭头 → 「转置」。
    • 把转置后的列重命名为Weight1、Weight2、Default,删除多余的索引和分组列。
    • 点击「关闭并上载」,结果就会导入Excel工作表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:27:21