以mysql为例(pandas可以利用set_index转为索引再unstack)
create table b
(
姓名 varchar(20),
语文 int,
数学 int,
英语 int
);
insert into b(姓名,语文,数学,英语) values('张三',60,70,80);
insert into b(姓名,语文,数学,英语) values('李四',90,100,0);
insert into b(姓名,语文,数学,英语) values('五狗',80,90,70);
select 姓名, '语文' as '课程', 语文 as '成绩'
from b
union all
select 姓名, '数学', 数学
from b
union all
select 姓名, '英语', 英语
from b;
#转为横向表
select 姓名,
max(case 课程 when '语文' then 成绩 else 0 end) as '语文',
max(case 课程 when '数学' then 成绩 else 0 end) as '数学',
max(case 课程 when '英语' then 成绩 else 0 end) as '英语'
from a
group by 姓名;