如何将DataFrame中存储向量的列拆分为多个独立变量
实现DataFrame结构转换的方案
你需要的是宽表到指定结构的转换,可通过Pandas的两种常用方法实现:
方法1:melt + pivot组合(逻辑清晰易理解)
- 先用
melt将年份列从列字段转为行维度 - 再用
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
相关产品推荐
相关产品推荐

