一文速学-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)

af1e9352713c47e7a9f2df6fcdeffa36.png


一、索引重塑


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


这种通过两个特征确定唯一值的方法,我们不仅可以用表格型结构表示,还可以用树形结构来表示:

a12dc05075634bb19221d861c7164ec5.png


树形结构其实就是在维持表格型行索引不变的情况下,把列索引该为二次行索引,相当于把表格型数据建立成层次化索引。

在pandas用到的方法是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


df1.stack()



二、表结构索引转换


1.宽表转化为长表


(1).stack


DataFrame.stack官网,基本格式:


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


根据pandas提供的stack()方法很容易就能实现长宽表之间的转换,以下就为一个宽表:


19f56e45d31d47118a8e0abd0c94523d.png

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

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

52e3b538a0b349e4953db24a692d1cf0.png

df1=df1.stack().reset_index()

b2842ab9802b45339d3838529f1bba77.png


melt()函数基本格式:


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


参数说明:


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一样的效果:

96f88baba6da4d1887580bbe88ba8e18.png


2.长表转换为宽表


常用方法为数据透视表,在pnadas可以使用pivot函数:


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


参数说明:

  • index:指定为行索引
  • columns:指定为列索引
  • value:指定为值


df1.pivot(index=['name','city'],columns='year',values='sale')

79d39688d21b43cfafa1a69eaec64424.png

目录
相关文章
|
13天前
|
Python
|
13天前
|
Python
|
12天前
|
Python
Pandas 常用函数-数据合并
Pandas 常用函数-数据合并
29 1
|
13天前
|
索引 Python
Pandas 常用函数-数据排序
10月更文挑战第28天
8 1
|
13天前
|
Python
Pandas 常用函数-查看数据
Pandas 常用函数-查看数据
14 2
|
13天前
|
SQL JSON 数据库
Pandas 常用函数-读取数据
Pandas 常用函数-读取数据
12 2
|
17天前
|
Python
通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法
在金融分析领域,"死叉"指的是短期移动平均线(如MA5)下穿长期移动平均线(如MA10),而"金叉"则相反。本文介绍了一种利用Python编程语言,通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法。该方法首先计算两种移动平均线,接着确定它们的交叉点,最后检查并输出最近一次死叉及其后是否形成了金叉。此技术广泛应用于股市趋势分析。
32 2
|
12天前
|
Python
Pandas 常用函数-数据选择和过滤
Pandas 常用函数-数据选择和过滤
10 0
|
1月前
|
数据可视化 数据挖掘 数据处理
模型预测笔记(四):pandas_profiling生成数据报告
本文介绍了pandas_profiling库,它是一个Python工具,用于自动生成包含多种统计指标和可视化的详细HTML数据报告,支持大型数据集并允许自定义配置。安装命令为`pip install pandas_profiling`,使用示例代码`pfr = pandas_profiling.ProfileReport(data_train); pfr.to_file("./example.html")`。
45 1
|
2月前
|
索引 Python
使用 pandas 对数据进行移动计算
使用 pandas 对数据进行移动计算
23 0