python DataFrame的stack()方法,unstack()方法,pivot()方法

本文详细介绍了如何使用pandas库中的stack()方法将列转换为行,unstack()方法反转这一过程,以及pivot()函数用于重塑数据以创建多维度表格。通过实例演示,展示了这些函数在数据重构和分析中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

1.stack()

                      在这里插入图片描述
stack()用于将列索引转换为最内层的行索引,这样叙述比较抽象,看示例就容易理解啦:

准备一组数据,给其设置双索引。

import pandas as pd
data = [['A类', 'a1', 123, 224, 254], ['A类', 'a2', 234, 135, 444], ['A类', 'a3', 345, 241, 324],
        ['B类', 'b1', 112, 412, 466], ['B类', 'b2', 224, 235, 345], ['B类', 'b3', 369, 214, 352],
        ['C类', 'c1', 236, 251, 485], ['C类', 'c2', 378, 216, 515], ['C类', 'c3', 135, 421, 312],
        ['D类', 'd1', 306, 325, 496], ['D类', 'd2', 147, 235, 524], ['D类', 'd3', 520, 222, 267]]
df = pd.DataFrame(data=data, columns=['类别', '编号', 'A指标', 'B指标', 'C指标'])
df = df.set_index(['类别', '编号'])
print(df)

在这里插入图片描述

df = df.stack()
print(df)

在这里插入图片描述
如图,成功将索引列之外的 A指标,B指标,C指标三列放在了同一列。
此时的df,不再是一个DataFrame,而变为了一个Series对象。:

print(type(df))

在这里插入图片描述
该Series的index列不同于原DataFrame的index列,而是在原DataFrame的index列的基础上,又增加了从右边合并过来的部分:

print(df.index)

在这里插入图片描述
此时Values为:

print(df.values)

在这里插入图片描述


2. unstack()

                      在这里插入图片描述
unstack是stack的逆向操作。
在上述示例的代码的基础上,对上边的df继续调用unstack()方法:

df1 = df.unstack()
print(df1)

在这里插入图片描述
可以看到unstack变回了原来的样子。


3. pivot()

                      在这里插入图片描述

这里对于上边例子中的数据稍作调整:
不设置多重索引

import pandas as pd
data = [['A类', '1', 123, 224, 254], ['A类', '2', 234, 135, 444], ['A类', '3', 345, 241, 324],
        ['B类', '1', 112, 412, 466], ['B类', '2', 224, 235, 345], ['B类', '3', 369, 214, 352],
        ['C类', '1', 236, 251, 485], ['C类', '2', 378, 216, 515], ['C类', '3', 135, 421, 312],
        ['D类', '1', 306, 325, 496], ['D类', '2', 147, 235, 524], ['D类', '3', 520, 222, 267]]
df = pd.DataFrame(data=data, columns=['类别', '编号', 'A指标', 'B指标', 'C指标'])
print(df)

在这里插入图片描述

df2 = df.pivot(index='编号', columns='类别', values='A指标')
print(df2)

在这里插入图片描述
index和columns分别指设定那一列的值为index,设置那一列的值为columns。values指表格要体现的指标。

df3 = df.pivot(index='类别', columns='编号', values='A指标')
print(df3)

在这里插入图片描述

<think>好的,我现在需要回答用户关于Pandas中stack方法的使用说明和功能介绍。首先,我得回忆一下自己对stack方法的理解,然后结合提供的引用内容来组织回答。 用户的问题是关于pandas的stack方法,所以我需要先明确stack的基本作用。根据之前学过的知识,stack方法通常用于将列索引转换为行索引,也就是将数据从宽格式转换为长格式,增加数据的层次化结构。这有助于数据重塑,方便后续的分析和处理。 接下来,我需要查看用户提供的引用内容,看看有没有可以直接引用的信息。引用[3]提到了pandas.DataFrame.stack函数的使用,示例中展示了使用stack方法并设置dropna参数的情况。引用[4]则更详细地解释了stack方法的作用,比如将列['store1','store2'等]转变为第二层列索引,生成一个层次化的Series。这些信息可以用来具体说明stack方法的功能和实际应用场景。 然后,我需要确保回答符合用户给出的系统级指令。特别是要使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$。但在这个问题中可能数学公式不多,不过如果有涉及到索引层级或重塑过程的解释,可能需要用公式来表达。例如,可以说明数据从二维结构转换为一维结构的过程,但暂时没有想到需要用具体的数学公式,所以可能这部分可以省略,或者简单用文字描述。 另外,需要生成相关问题,这部分要根据stack方法的相关知识点来设计。比如,stackunstack的区别、使用场景、参数说明等。 接下来,组织回答的结构。首先介绍stack方法的作用,然后给出基本语法,接着用示例代码说明,再结合引用内容进行补充说明,最后列出相关问题。 需要注意的是,引用标记要自然地加在引用的地方。例如,当提到stack将列转换为行索引时,引用[4]中的例子,就在句末加上[^4]。同样,在语法部分,引用[1]中的unstack语法可以作为对比,但用户的问题是关于stack的,所以可能需要看是否有关于stack的语法引用。但提供的引用中,引用[1]是关于unstack的语法,引用[3]和[4]是关于stack的示例和说明。 因此,在回答中,当介绍stack的语法时,虽然没有直接的引用给出stack的语法结构,可能需要根据知识来写,或者参考引用[3]的示例。例如,引用[3]中的代码示例展示了df_multi_level_cols3.stack(dropna=False),这可能说明stack方法可以接受dropna参数,所以在语法部分可以提到参数。 现在,整理回答的各个部分: 1. 功能介绍:将列索引转换为行索引,生成层次化索引的Series或DataFrame。引用[4]中的例子说明具体转换过程。 2. 语法:可能类似于unstack,但参数可能有level和dropna。例如,DataFrame.stack(level=-1, dropna=True),这里可能需要结合官方文档的知识,但用户提供的引用中没有明确给出,但引用[3]提到了dropna参数的使用。 3. 示例代码:构造一个DataFrame,展示使用stack后的效果,如引用[4]中的例子。 4. 参数说明:如level指定要堆叠的列索引层级,dropna是否忽略缺失值。 5. 注意事项:比如处理缺失值,与unstack的关系等。 6. 相关问题:如何与unstack配合使用,level参数的作用,处理多层索引等。 在回答过程中,需要确保正确引用提供的资料。例如,在说明stack转换列到行时,引用[4]中的内容,所以加上。在提到dropna参数时,引用[3]中的示例,所以加上[^3]。 现在,开始编写回答,确保结构清晰,符合用户要求的中文回答,并正确应用引用标记。同时,生成的相关问题需要围绕stack方法展开,可能包括参数、使用场景、与其他方法(如unstack)的区别等。</think>### Pandas stack方法使用说明 #### 1. 核心作用 stack方法用于将列索引转换为行索引,实现从宽格式到长格式的数据重塑。例如,将多列数据堆叠为层次化索引的Series或DataFrame,增强数据可分析性。 #### 2. 基本语法 ```python DataFrame.stack(level=-1, dropna=True) ``` - `level`:指定要堆叠的列索引层级(默认最后一层) - `dropna`:是否忽略结果中的缺失值(默认True)[^3] #### 3. 使用示例 **原始数据:** ```python import pandas as pd data = pd.DataFrame({ 'store1': [10, 20], 'store2': [15, 25], 'store3': [12, 18] }, index=['A', 'B']) ``` 输出(列索引为单层): ``` store1 store2 store3 A 10 15 12 B 20 25 18 ``` **应用stack后:** ```python stacked = data.stack() print(stacked) ``` 输出(列索引转为行索引第二层): ``` A store1 10 store2 15 store3 12 B store1 20 store2 25 store3 18 dtype: int64 ``` #### 4. 关键特性 - **多层索引处理**:支持多级列索引的堆叠,通过`level`参数控制操作层级 - **缺失值处理**:`dropna=False`保留NaN值,避免数据丢失 - **反向操作**:`unstack`可实现逆向数据展开(如引用[1]所示语法)[^1] #### 5. 典型应用场景 - 处理面板数据时统一观测维度 - 为时间序列分析准备长格式数据 - 配合pivot_table进行多维数据聚合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侯小啾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值