您的位置: 网站首页> Pandas教程> 当前文章
pandas多列变多行(即宽表变长表)melt和stack函数
老董-我爱我家房产SEO2022-05-01175围观,136赞
多行转多列和多列转多行是较为常见的操作,上一篇文章介绍了pandas多行变多列(即长表变宽表)操作,本文介绍pandas多列变多行(即宽表变长表)操作,分别用melt和stack来实现。
1、利用melt函数实现多列变多行
DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)
官方文档melt参数很多,但是我常用的也就4个。id_vars:代表选择作为行索引的列;value_vars:代表选择获取值的列;var_name:对value_vars重命名;value_name:对值所在的列重命名。空谈没感觉,用例子来展示。
# -*- coding:UTF-8 -*- import pandas as pd df = pd.read_excel('11.xlsx') print(df) print('--------------') df_res = df.melt(id_vars=['duankou'], value_vars=['bj','sh']) print(df_res) print('==============') # 进行重命名 df_res = df.melt(id_vars=['duankou'], value_vars=['bj','sh'],var_name='city', value_name='num') print(df_res)
duankou bj sh nj 0 pc 1000 1200 2000 1 mo 1500 1600 2500 -------------- duankou variable value 0 pc bj 1000 1 mo bj 1500 2 pc sh 1200 3 mo sh 1600 ============== duankou city num 0 pc bj 1000 1 mo bj 1500 2 pc sh 1200 3 mo sh 1600
2、利用stack实现多列变多行
DataFrame.stack(level=- 1, dropna=True)
对比melt函数可以发现,stack函数侧重于对索引层级的操作,如果是2重索引的df,则level=-1代表内层索引。我们拿双重索引的df来演示下。
# -*- coding:UTF-8 -*- import pandas as pd import pandas as pd df = pd.read_excel('11.xlsx',index_col=[0],header=[0,1]) print(df) df_res = df.stack(level=-1) print(df_res)
bj sh nj duankou low high low high low high pc 1000 1100 2000 2100 3000 3100 mo 1500 1600 2500 2600 3500 3600 bj nj sh duankou pc high 1100 3100 2100 low 1000 3000 2000 mo high 1600 3600 2600 low 1500 3500 2500
关于pandas多列变多行(即宽表变长表)的操作就介绍到这里,读者可以结合上一篇长表变宽表来集中学习理解。
本文就此结束,感谢IT人士的关注pandas多列变多行(即宽表变长表)melt和stack函数,本文合作企业直达:更多推荐。
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
pandas多列变多行(即宽表变长表)melt和stack函数文章写得不错,值得赞赏