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

目录
相关文章
|
18天前
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by='A', ascending=False)`。`rank()`函数用于计算排名,如`df['A'].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=['A', 'B'], ascending=[True, False])`和分别对'A'、'B'列排名。
24 2
|
18天前
|
存储 Python
使用Pandas库对非数值型数据进行排序和排名
在Pandas中,支持对非数值型数据排序和排名。可按以下方法操作:1) 字符串排序,使用`sort_values()`,如`sorted_df = df.sort_values(by='Name', ascending=False)`进行降序排序;2) 日期排序,先用`to_datetime()`转换,再排序,如`sorted_df = df.sort_values(by='Date')`;3) 自定义排序,结合`argsort()`和自定义规则。
27 2
|
14天前
|
数据采集 数据处理 索引
如何使用 Pandas 删除 DataFrame 中的非数字类型数据?
如何使用 Pandas 删除 DataFrame 中的非数字类型数据?
27 3
|
16天前
|
存储 数据挖掘 数据处理
使用pandas高效读取筛选csv数据
本文介绍了使用Python的Pandas库读取和处理CSV文件。首先,确保安装了Pandas,然后通过`pd.read_csv()`函数读取CSV,可自定义分隔符、列名、索引等。使用`head()`查看数据前几行,`info()`获取基本信息。Pandas为数据分析提供强大支持,是数据科学家的常用工具。
23 0
|
17天前
|
数据挖掘 数据处理 索引
如何使用Python的Pandas库进行数据筛选和过滤?
Pandas是Python数据分析的核心库,提供DataFrame数据结构。基本步骤包括导入库、创建DataFrame及进行数据筛选。示例代码展示了如何通过布尔索引、`query()`和`loc[]`方法筛选`Age`大于19的记录。
21 0
|
17天前
|
索引 Python
如何使用Pandas进行数据合并?
Pandas提供`merge()`, `join()`, `concat()`等方法进行数据合并。基本步骤包括导入pandas库、创建或加载DataFrame,然后调用这些方法合并数据。示例中展示了如何使用`merge()`和`join()`:创建两个DataFrame `df1`和`df2`,通过`merge()`基于索引合并,以及`join()`进行外连接合并。
21 0
|
19天前
|
Python
如何使用Python的Pandas库进行数据缺失值处理?
Pandas在Python中提供多种处理缺失值的方法:1) 使用`isnull()`检查;2) `dropna()`删除含缺失值的行或列;3) `fillna()`用常数、前后值填充;4) `interpolate()`进行插值填充。根据需求选择合适的方法处理数据缺失。
43 9
|
21天前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
10 2
|
24天前
|
数据挖掘 数据处理 索引
Pandas时间序列处理:时间数据的魅力
【4月更文挑战第16天】Pandas是Python中用于数据处理的库,特别适合时间序列数据操作。它提供`date_range`和`Timestamp`创建时间序列索引,支持以时间为DataFrame和Series的索引。Pandas的`resample`方法允许重采样和频率转换,如日数据转周数据。`rolling`方法用于移动窗口操作,如计算移动平均值。此外,还能进行日期偏移和时区转换,如`shift`和`tz_convert`。通过这些功能,Pandas帮助分析时间序列中的趋势和模式,提升数据分析效率。
|
24天前
|
数据挖掘 数据处理 索引
数据合并与连接:Pandas中的强大数据整合功能
【4月更文挑战第16天】Pandas是Python数据分析的库,提供数据合并与连接功能。本文聚焦于`merge`和`concat`函数。`merge`基于键合并DataFrame,如示例中`df1`和`df2`按'key'列合并,支持多种连接方式。`concat`则沿轴堆叠DataFrame,如`df3`和`df4`沿行连接。注意合并连接时键的一致性、选择合适连接方式及处理索引和数据结构,以确保数据准确一致。学习这些方法能有效整合多数据源,便于分析。