锋哥原创的Pandas2 Python数据处理与分析 视频教程:
2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili
在数据处理与分析领域,Pandas 数据重塑(Reshaping)与透视(Pivoting)是两种重要操作,用于调整数据结构以满足特定分析需求。以下是对它们的解释:
数据重塑指通过改变表格的行、列结构来重新组织数据,常见方法包括堆叠(Stacking)与拆堆(Unstacking)、长格式与宽格式转换等。
数据透视是一种特殊的数据重塑,通过聚合函数(如sum
、mean
)对数据进行分组汇总,生成交叉表(如 Excel 中的透视表)。数据透视表,顾名思义,是指它有“透视”数据的能力,可以找出大量复杂无关的数据的内在关系,将数据转化为有意义、有价值的信息, 从而看到它所代表的事物的规律和本质。
stack() - 堆叠 (列 -> 行)
pandas
中的 stack()
方法用于将 列索引的某一层级 转换为 行索引,从而将 DataFrame 从 宽格式 转换为 长格式。这种操作在数据重塑(Reshaping Data)中非常常见,尤其在处理多级索引(MultiIndex)数据时。
基本语法
DataFrame.stack(level=-1, dropna=True)
参数说明
-
level (默认为
-1
):-
指定要堆叠的列索引层级(整数、字符串或列表)。
-
-1
表示最内层(默认)。
-
-
dropna (默认为
True
):-
是否在结果中删除包含
NaN
的行。
-
返回值:
-
返回一个
Series
或DataFrame
(若堆叠后仍有列索引则返回DataFrame
)。
示例
示例 1:单层列索引的堆叠
import pandas as pd
# 创建 DataFrame
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}, index=['row1', 'row2'])
print("原始数据:")
print(df)
执行 stack()
:
stacked = df.stack()
print("堆叠后:")
print(stacked)
列索引 ['A', 'B']
被转换为行索引的第二层。
结果是一个多级索引的 Series
。
示例 2:多层列索引的堆叠
# 创建多层列索引的 DataFrame
columns = pd.MultiIndex.from_tuples([('A', 'X'), ('A', 'Y'), ('B', 'X')])
df_multi = pd.DataFrame([[1, 2, 3], [4, 5, 6]], index=['row1', 'row2'], columns=columns)
print("原始数据:")
print(df_multi)
默认堆叠(最内层 level=-1):
stacked_inner = df_multi.stack()
print("堆叠最内层:")
print(stacked_inner)
-
最内层列索引
['X','Y','X']
被堆叠到行索引。 -
缺失值用
NaN
填充(可通过dropna=False
保留)。
堆叠指定层级(level=0):
stacked_outer = df_multi.stack(level=0)
print("堆叠最外层:")
print(stacked_outer)
-
最外层列索引
['A','B']
被堆叠到行索引。