四个函数功能的简单总结对比,stack/unstack一组,pivot/melt一组:
- stack():将原来的列索引转成最内层的行索引;直观理解
column to index
- unstack():将最内层的行索引还原成列索引(默认最内层索引level=-1,可指定level=0为最外层索引);直观理解
index to column
- pivot():将某列的值设置为行索引、列索引以及对应的值;直观理解
column values to index, to column, to value
- melt():将特定列指定为标识符,特定列作为数值;直观理解
columns to values
1. stack()函数
DataFrame.stack(level=- 1, dropna=True)
-
stack是堆叠的意思,简单理解,在书架上水平位置横排着一本一本的书,将其堆叠起来变成竖着的一摞书的过程即为stack操作。将指定的级别从列堆叠到索引。返回一个经过重塑的DataFrame或Series,该DataFrame或Series有一个多级索引,与当前的DataFrame相比有一个或多个新的最内层,新的最内层是通过旋转当前数据帧的列来创建的。
2.unstack()函数
DataFrame.unstack(level=- 1, fill_value=None)
-
unstack是取消堆叠的意思,简单理解就是把index转变为column,而stack的操作是把column变为index。
3.pivot()函数
DataFrame.pivot(index=None, columns=None, values=None)
-
pivot是旋转的意思,直观理解是根据column和index对dataframe进行重新塑造,根据参数指定特定的index,column和value,更加灵活。
4.melt()函数
DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)
- 该函数有助于将DataFrame将从宽格式转换为长格式,其中一个或多个列是标识符变量(id_vars),而所有其他列,即测量变量(value_vars),是与行轴“不相关”的,只留下两个非标识符列“变量”和“值”。也可以指定标识列和数值列的名称。
pivot()和melt()函数是较简单方便的,但是它俩是依据column的值作为索引的分类,和stack/unstack在column和index之间的转换有实质差别。一般在转换之后会进行reset_index()操作。
写的太糙了,看原始函数介绍比较好。
参见资料:
Pandas DataFrame stack 函数
Pandas DataFrame unstack 函数
Pandas DataFrame pivot 函数
Pandas DataFrame melt 函数
pandas中DataFrame的stack()、unstack()和pivot()方法的对比