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

如何将DataFrame中存储向量的列拆分为多个独立变量

实现DataFrame结构转换的方案

你需要的是宽表到指定结构的转换,可通过Pandas的两种常用方法实现:


方法1:melt + pivot组合(逻辑清晰易理解)

  1. 先用melt将年份列从列字段转为行维度
  2. 再用pivot将类别维度从行转为列字段
    示例代码:
import pandas as pd

# 假设df_raw为你的原始DataFrame
df_melted = df_raw.melt(
    id_vars=['地区', '类别'], # 保持不变的列
    var_name='年份', # 原列名(年份)转换后对应的列名
    value_name='数值' # 原数值转换后对应的列名
)

df_result = df_melted.pivot(
    index=['地区', '年份'], # 作为行索引的列
    columns='类别', # 要转为列的维度
    values='数值' # 填充的数值列
).reset_index().rename_axis(columns=None) # 重置索引,删除多余的列名索引

方法2:stack + unstack组合(代码更简洁)

直接通过层级索引的堆叠和反堆叠实现转换:

df_result = df_raw.set_index(['地区', '类别']) \
    .stack() # 将年份列堆叠为行维度
    .unstack('类别') # 将类别维度反堆叠为列
    .reset_index() # 重置索引
    .rename_axis(columns=None) # 删除多余的列名索引

特殊情况处理

如果原始数据存在重复的地区+类别组合导致pivot报错,可以用pivot_table替代并指定聚合规则:

df_result = df_melted.pivot_table(
    index=['地区', '年份'],
    columns='类别',
    values='数值',
    aggfunc='sum' # 可根据需求替换为'mean'、'first'等聚合方式
).reset_index().rename_axis(columns=None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:03