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

如何用Pandas实现DataFrame透视转置?附转换需求及尝试记录

Pandas 表格数据转置重组解决方案

问题描述

原始数据集:

Period   Course Teacher
0      1      Sci  Teach1
1      2      Art  Teach1
2      H     Span  Teach1
3      1       PE  Teach2
4      2       CS  Teach2
5      H     Conf  Teach2
6      1   AP Art  Teach3
7      2  Dig Art  Teach3
8      H   Health  Teach3

期望转换后的结构:

Teacher       H      P1       P2
0  Teacher1    Span     Sci      Art
1  Teacher2    Conf      PE       CS
2  Teacher3  Health  AP Art  Dig Art

尝试操作及遇到的问题:

  • 使用df.transpose()得到的结果不符合需求,输出如下:
0        1        2  ...        6         7        8
Period          1        2        H  ...        1         2        H
 Course       Sci      Art     Span  ...   AP Art   Dig Art   Health
 Teacher   Teach1   Teach1   Teach1  ...   Teach3    Teach3   Teach3
  • 使用df.groupby(['Teacher'])时出现报错:grouper, exclusions, obj = get_grouper
  • 搜索过pivot、melt、transform等方法,但未找到匹配示例

解决方案

你需要的是**数据透视(pivot)**操作,同时对Period列的取值做重命名处理,具体步骤如下:

1. 加载原始数据

先确保DataFrame正确加载,示例代码:

import pandas as pd

data = {
    'Period': ['1', '2', 'H', '1', '2', 'H', '1', '2', 'H'],
    'Course': ['Sci', 'Art', 'Span', 'PE', 'CS', 'Conf', 'AP Art', 'Dig Art', 'Health'],
    'Teacher': ['Teach1', 'Teach1', 'Teach1', 'Teach2', 'Teach2', 'Teach2', 'Teach3', 'Teach3', 'Teach3']
}
df = pd.DataFrame(data)

2. 重命名Period列的取值

把Period中的1改为P1,2改为P2,保持H不变:

df['Period'] = df['Period'].replace({'1': 'P1', '2': 'P2'})

3. 使用pivot_table实现重组

用pivot_table按Teacher分组,将修改后的Period作为列,Course作为单元格值:

result = df.pivot_table(index='Teacher', columns='Period', values='Course', aggfunc='first').reset_index()
  • index='Teacher':指定行索引为教师姓名
  • columns='Period':指定列名为修改后的Period值
  • values='Course':填充单元格的内容为Course列的值
  • aggfunc='first':因每个教师对应每个Period仅一条数据,用first确保取到唯一值
  • reset_index():将Teacher从索引转为普通列

4. 调整列顺序(可选)

如果需要按Teacher、H、P1、P2的顺序排列列:

result = result[['Teacher', 'H', 'P1', 'P2']]

最终输出

运行上述代码后,result的结构与期望完全一致:

Teacher       H      P1       P2
0    Teach1    Span     Sci      Art
1    Teach2    Conf      PE       CS
2    Teach3  Health  AP Art  Dig Art

关于groupby报错的说明

之前用groupby报错是因为仅执行了分组操作,未搭配聚合函数(如first、sum等),groupby只是分组容器,必须结合聚合逻辑才能生成结果,而pivot_table更适配这种行列转换的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:23:55