您的位置: 网站首页> Pandas教程> 当前文章
pandas多行转多列(长表变宽表)pivot和unstack
老董-我爱我家房产SEO2022-05-01168围观,106赞
pandas处理数据除了对数据进行加减乘除、关联、分组等之外,还会涉及对数据进行变形操作,比如多行转多列,多列转多行,本文介绍下pandas多行变多列(即长表变宽表)操作,分别用pivot和unstack来实现。
1、利用pivot函数实现多行变多列
DataFrame.pivot(index=None, columns=None, values=None) # 官方文档pivot的介绍
pivot函数比较好理解,index参数指的是你想作为行索引的列,columns指的是你想让他变成列索引的数据所在的列。实现多行变多列案例如下:
PS:如果你遇到Index contains duplicate entries, cannot reshape报错,别担心,请看这里解决Index contains duplicate entries, cannot reshape
# -*- coding:UTF-8 -*-
df = pd.read_excel('11.xlsx')
print(df)
print('------------')
df_res = df.pivot(index=['engine'],columns=['pingtai'],values=[2020,2021])
print(df_res)
engine pingtai 2020 2021
0 baidu pc 10 100
1 baidu wap 20 200
2 baidu app 30 300
3 sogou pc 30 300
4 sogou wap 40 400
5 sogou app 50 500
------------
2020 2021
pingtai app pc wap app pc wap
engine
baidu 30 10 20 300 100 200
sogou 50 30 40 500 300 400
2、利用unstack实现多行变多列
DataFrame.unstack(level=- 1, fill_value=None) #官方unstack介绍
对比pivot函数,可以发现unstack的参数针对的是索引层级,所以一般是多重索引时才用这个函数操作,如果是2重索引,那么level=-1代表内层索引。同样是上面的数据源,我们看下如何实现多行变多列。
# -*- coding:UTF-8 -*-
df = pd.read_excel('11.xlsx')
df.set_index(['engine','pingtai'],inplace=True) # 转为二维索引
print(df)
print('------------')
df_res = df.unstack(level=-1)
print(df_res)
2020 2021
engine pingtai
baidu pc 10 100
wap 20 200
app 30 300
sogou pc 30 300
wap 40 400
app 50 500
------------
2020 2021
pingtai app pc wap app pc wap
engine
baidu 30 10 20 300 100 200
sogou 50 30 40 500 300 400
关于pandas多行变多列(即长表变宽表)的操作就介绍到这里,如果需要更灵活的操作,大家可以自己研究,下一篇文章介绍pandas多列变多行(即宽表变长表)。
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
pandas多行转多列(长表变宽表)pivot和unstack文章写得不错,值得赞赏


