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

将单列variable转换为6列:Google数据分析顶点项目数据重塑需求

将长格式数据集转换为宽格式(Google Data Analytics Capstone Project)

问题背景

你手头有一个86000行的长格式数据集,结构如下:

Date   loc   loc_type  variable   value
---------------------------------------
1      1       1         1         (num)
1      1       1         2         (num)
1      1       1         3         (num)
1      1       1         4         (num)
1      1       1         5         (num)
1      1       1         6         (num)
1      1       2         1         (num)
...

需要转换为宽格式,将variable列的1-6值转为独立列var1到var6,目标格式如下:

Date   loc   loc_type  var1   var2   var3   var4   var5   var6
------------------------------------------------------------------
1        1      1     (num)   (num)  (num)  (num)  (num)   (num)
1        1      2     (num)   (num)  (num)  (num)  (num)   (num)
...

解决方案

以下是几种常用工具的实现方法,根据你的技术栈选择即可:

1. Python(Pandas)

这是处理这类数据转换最灵活的方式,适合大数据集(86000行完全没问题):

import pandas as pd

# 读取数据集(假设是CSV文件,根据实际格式调整)
df = pd.read_csv('your_dataset.csv')

# 使用pivot_table转换宽格式,aggfunc='first'确保每个分组取唯一值(无重复时可用pivot)
wide_df = df.pivot_table(
    index=['Date', 'loc', 'loc_type'],
    columns='variable',
    values='value',
    aggfunc='first'
).reset_index()

# 重命名列,将1-6改为var1-var6
wide_df.columns = ['Date', 'loc', 'loc_type'] + [f'var{i}' for i in range(1,7)]

# 保存结果
wide_df.to_csv('wide_dataset.csv', index=False)
  • 如果数据中存在同一Date+loc+loc_type+variable组合的重复值,可将aggfunc改为mean/sum等聚合函数处理。

2. Excel(数据透视表/Power Query)

适合不熟悉代码的用户:

方法A:数据透视表

  • 选中整个数据集,点击「插入」→「数据透视表」
  • 行区域拖入Date、loc、loc_type;列区域拖入variable;值区域拖入value(值字段设置选「值」而非计数)
  • 调整透视表布局为「以表格形式显示」,手动修改列名为var1到var6

方法B:Power Query(更高效)

  • 选中数据集,点击「数据」→「从表格/区域」进入Power Query编辑器
  • 选择Date、loc、loc_type列,点击「转换」→「透视列」
  • 透视列设置:值列选value,高级选项选「不要聚合」(无重复值时),确定后自动生成宽格式,重命名列即可

3. SQL

如果数据存储在数据库中,可使用以下方法:

MySQL/PostgreSQL(CASE WHEN)

SELECT
    Date,
    loc,
    loc_type,
    MAX(CASE WHEN variable = 1 THEN value END) AS var1,
    MAX(CASE WHEN variable = 2 THEN value END) AS var2,
    MAX(CASE WHEN variable = 3 THEN value END) AS var3,
    MAX(CASE WHEN variable = 4 THEN value END) AS var4,
    MAX(CASE WHEN variable = 5 THEN value END) AS var5,
    MAX(CASE WHEN variable = 6 THEN value END) AS var6
FROM your_table
GROUP BY Date, loc, loc_type;

SQL Server(PIVOT函数)

SELECT
    Date,
    loc,
    loc_type,
    [1] AS var1,
    [2] AS var2,
    [3] AS var3,
    [4] AS var4,
    [5] AS var5,
    [6] AS var6
FROM your_table
PIVOT (
    MAX(value)
    FOR variable IN ([1],[2],[3],[4],[5],[6])
) AS pivot_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:42:43