python pandas unstack 行转列

举报
lu_zhishen 发表于 2021/04/04 17:43:49 2021/04/04
【摘要】 原始数据:姓名性别科目分数张三 男  语文9张三 男  数学8张三 男  物理7李四 男  物理6李四 男  英语5李四 男  数学4将科目按照列进行转换,转换后的数据代码如下:import pandas as pddf = pd.read_excel('test2.xlsx',sheet_name='Sheet1')a=df.set_index(["姓名","性别","科目"])["分数"...

原始数据:

姓名 性别 科目 分数
张三  男   语文 9
张三  男   数学 8
张三  男   物理 7
李四  男   物理 6
李四  男   英语 5
李四  男   数学 4

将科目按照列进行转换,转换后的数据

代码如下:

import pandas as pd
df = pd.read_excel('test2.xlsx',sheet_name='Sheet1')

a=df.set_index(["姓名","性别","科目"])["分数"]  #形成一个Series,最后一级索引是科目,unstack是将最后一级的索引变成DataFrame的列,前面的索引变成DataFrame的索引。默认情况是把最后一级变成df的列,如果.unstack(level=0),则会把第一级索引变成df的列

print(a)

姓名   性别   科目
张三   男    语文    9
          数学    8
          物理    7
李四   男    物理    6
          英语    5
          数学    4
Name: 分数, dtype: int64

d=a.unstack()  #调用具有二级索引的Series的unstack, 会得到一个DataFrame
print(d)

科目        数学   物理   英语   语文
姓名  性别                     
张三  男    8.0  7.0  NaN  9.0
李四  男    4.0  6.0  5.0  NaN

d=d.rename_axis(columns=None) 
print(d)

          数学   物理   英语   语文
姓名  性别                     
张三  男    8.0  7.0  NaN  9.0
李四  男    4.0  6.0  5.0  NaN

d.reset_index()

示例2:把姓名变成列,分数变成行

import pandas as pd
df = pd.read_excel('test2.xlsx',sheet_name='Sheet1')
a=df.set_index(["姓名","性别","科目"])["分数"].unstack(level=0).rename_axis(columns=None).reset_index()
print(a)

 性别  科目  张三   李四 
0  男    数学  8.0  4.0
1  男    物理  7.0  6.0
2  男    英语  NaN  5.0
3  男    语文  9.0  NaN
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。