一文速学-Pandas索引重塑实现长宽表数据转换

本文已参与「新人创造礼」活动,一起敞开创造之路。

前语

Pandas的根底数据结构Series和DataFrame。若是还不清楚的能够再去看看我之前的博客具体介绍这两种数据结构的处理办法: 一文速学-数据剖析之Pandas数据结构和根本操作代码

一文速学-Pandas完成数值替换、排序、排名、刺进和区间切片 一些Pandas根底函数的运用办法: DataFrame行列表查询操作详解+代码实战

DataFrame多表兼并拼接函数concat、merge参数详解+代码操作展现

Pandas中read_excel函数参数运用详解+实例代码

一文速学-Pandas索引设置操作各类办法详解+代码展现

关于包含在异常值里面的空值和重复值均有三篇博客专门具体介绍了处理他们的办法: 一文速学-Pandas处理重复值操作各类办法详解+代码展现

一文速学-Pandas处理缺失值操作各类办法详解

一文速学-Pandas异常值检测及处理操作各类办法详解+代码展现

创立展现作用DataFrame

data = {
        'sum':[100, 120, 130, 150, 160],
        '2020':[30,30,40,50,40],
        '2021':[30,50,50,20,40],
        '2022':[40,40,40,80,80]
        }
name=['user1', 'user2', 'user3', 'user4', 'user5']
df1= pd.DataFrame(data,names='name',index=name)

一文速学-Pandas索引重塑完成长宽表数据转化

一、索引重塑

索引重塑便是将原来的索引进行重新构造,咱们依据DataFrame的结构表可知,咱们确定一个数据是依靠他的列名和行名对应得到,能够理解为该数据的x和y坐标轴。例如咱们想查找user2的2021年数据。而重塑索引更像是换了个坐标系,等于换了个基。

这种经过两个特征确定仅有值的办法,咱们不只能够用表格型结构表明,还能够用树形结构来表明:

一文速学-Pandas索引重塑完成长宽表数据转化
树形结构其实便是在坚持表格型行索引不变的情况下,把列索引该为二次行索引,相当于把表格型数据建立成层次化索引。

在pandas用到的办法是stack():

df1.stack()
user1  sum     100
       2020     30
       2021     30
       2022     40
user2  sum     120
       2020     30
       2021     50
       2022     40
user3  sum     130
       2020     40
       2021     50
       2022     40
user4  sum     150
       2020     50
       2021     20
       2022     80
user5  sum     160
       2020     40
       2021     40
       2022     80
dtype: int64

二、表结构索引转化

1.宽表转化为长表

(1).stack

DataFrame.stack官网,根本格局:

DataFrame.stack(level=-1, dropna=True)

依据pandas供给的stack()办法很简单就能完成长宽表之间的转化,以下就为一个宽表:

一文速学-Pandas索引重塑完成长宽表数据转化

要将宽表转化为长表首先要坚持name和city不变的前提下,将年份信息变为行索引,所以要现将name和city先设置为索引,然后再调用stack()办法,将列索引也转化为行索引,最后用reset_index()办法进行索引重置。(若还是对索引办法不清楚的能够再去看看一文速学-Pandas索引设置操作各类办法详解+代码展现这篇博客)

df1.set_index(['name','city'],inplace=True)

一文速学-Pandas索引重塑完成长宽表数据转化

df1=df1.stack().reset_index()

一文速学-Pandas索引重塑完成长宽表数据转化

(2).melt

melt()函数根本格局:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数阐明:

  • frame:指定DataFrame
  • id_vars:{tuple, list, or ndarray, optional},将指定的列作为标识符变量,也便是用于指明宽表转化到长表时坚持不变的列
  • value_vars:指定第二索引列,假如不指定,将默认设置为id_vars运用的所有列
  • var_name:表明原来的列索引转化为行索引以后对应的列名
  • value_name:表明新索引对应的值的列名
df1.melt(id_vars=['name','city'],var_name='year',value_name='sale')

运用这段代码能够达到和stack一样的作用:

一文速学-Pandas索引重塑完成长宽表数据转化

2.长表转化为宽表

常用办法为数据透视表,在pnadas能够运用pivot函数:

DataFrame.pivot(index=None, columns=None, values=None)

参数阐明:

  • index:指定为行索引
  • columns:指定为列索引
  • value:指定为值
df1.pivot(index=['name','city'],columns='year',values='sale')

一文速学-Pandas索引重塑完成长宽表数据转化

点关注,防走丢,如有纰漏之处,请留言指导,非常感谢

以上便是本期全部内容。我是fanstuck ,有问题咱们随时留言评论 ,咱们下期见。

发表回复

提供最优质的资源集合

立即查看 了解详情