python pandas unstack 行转列
【摘要】 原始数据:姓名性别科目分数张三 男 语文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)