重排列表格型数据有多种基础操作。这些操作被称为重塑或透视。
多层索引在DataFrame中提供了一种一致性方式用于重排列数据。以下是两个基础操作:
考虑一个带有字符串数组作为行和列索引的小型DataFrame:
在这份数据上使用stack方法会将列透视到行,产生一个新的Series:
从一个多层索引序列中,你可以使用unstack方法将数据重排列后放入一个DataFrame中:
默认情况下,最内层是已拆堆的(与stack方法一样)。可以传入一个层级序号或名称来拆分一个不同的层级:
如果层级中的所有值并未包含于每个子分组中时,拆分可能会引入缺失值:
默认情况下,堆叠会过滤出缺失值,因此堆叠拆堆的操作是可逆的:
当在DataFrame中拆堆时,被拆堆的层级会变为结果中最低的层级:
在调用stack方法时,我们可以指明需要堆叠的轴向名称:
在数据库和CSV中存储多时间序列的方式就是所谓的长格式或堆叠格式。载入一些示例数据,然后做少量的时间序列规整和其他的数据清洗操作:
简单地说,PeriodIndex将year和quarter等列进行联合并生成了一种时间间隔类型:
现在,ldata看起来如下:
这种数据即所谓的多时间序列的长格式,或称为具有两个或更多个键的其他观测数据(这里的键是date和item)。表中的每一行表示一个时间点上的单个观测值。
在DataFrame中,pivot方法的反操作是pandas.melt。与将一列变换为新的Data Frame中的多列不同,它将多列合并成一列,产生一个新的DataFrame,其长度比输入更长。
‘key’列可以作为分组指标,其他列均为数据值。当使用pandas.melt时,必须指明哪些列是分组指标(如果有的话)。
使用pivot方法,可以将数据重塑回原先的布局:
由于pivot的结果根据作为行标签的列生成了索引,使用reset_index来将数据回移一列:
也可以指定列的子集作为值列:
pandas.melt的使用也可以无须任何分组指标: