您的位置: 网站首页> Pandas教程> 当前文章

pandas多行转多列(长表变宽表)pivot和unstack

老董-我爱我家房产SEO2022-05-01158围观,126赞

  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。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    pandas多行转多列(长表变宽表)pivot和unstack文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200