如何将Pandas DataFrame列标题转换为索引并重塑数据结构
Pandas DataFrame 结构重塑方法
原始数据结构
| 详情项 | 人员1 | 人员2 | 人员3 |
|---|---|---|---|
| 姓名 | Steve | Larry | Dave |
| 年龄 | 45 | 56 | 67 |
| 爱好 | Running | Skating | Painting |
目标数据结构
| 人员 | 姓名 | 年龄 | 爱好 |
|---|---|---|---|
| 人员1 | Steve | 45 | Running |
| 人员2 | Larry | 56 | Skating |
| 人员3 | Dave | 67 | Painting |
实现方法
方法一:转置+重置索引(简单直接)
适配当前的简单结构,代码量少:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ '详情项': ['姓名', '年龄', '爱好'], '人员1': ['Steve', '45', 'Running'], '人员2': ['Larry', '56', 'Skating'], '人员3': ['Dave', '67', 'Painting'] }) # 核心转换步骤 result = df.set_index('详情项').T.reset_index() # 重命名列以匹配目标结构 result.columns = ['人员', '姓名', '年龄', '爱好'] print(result)
步骤说明:
set_index('详情项'):将"详情项"列设为索引,为转置做准备.T:对DataFrame进行行列转置reset_index():把转置后的原列名(人员1/2/3)转为普通列- 最后重命名列,对齐目标结构的字段名
方法二:melt+pivot组合(扩展性强)
如果后续数据结构更复杂,这种方法能应对更多场景:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ '详情项': ['姓名', '年龄', '爱好'], '人员1': ['Steve', '45', 'Running'], '人员2': ['Larry', '56', 'Skating'], '人员3': ['Dave', '67', 'Painting'] }) # 第一步:转成长格式数据 melted = df.melt(id_vars='详情项', var_name='人员', value_name='值') # 第二步:转回宽格式数据 result = melted.pivot(index='人员', columns='详情项', values='值').reset_index() # 清理列名层级 result.columns.name = None # 调整列顺序(确保和目标结构一致) result = result[['人员', '姓名', '年龄', '爱好']] print(result)
步骤说明:
melt():把多列人员数据拆分为"人员"和"值"的长格式,方便后续重组pivot():以"人员"为行索引,"详情项"为列,将"值"填充到对应位置- 最后清理列名层级并调整列顺序,匹配目标结构
内容的提问来源于stack exchange,提问作者UntilComputersTakeOver
相关产品推荐
相关产品推荐

