8.3 重塑和轴向旋转
重新排列表格型数据
8.3.1 重塑层次化索引
-
stack:将数据的列”旋转“为行;
-
unstack:将数据的行“旋转”为列。
例如:
data=pd.DataFrame(np.arange(6).reshape((2,3)),
index=pd.Index(['ohio','colorado'],name='state'),
columns=pd.Index(['one','two','three'],name='number'))
#将列转换为行
data.stack()
#将行转换为列
data.stack().unstack()
#等价于
data.stack().unstack(1)
默认情况下,unstack操作的是最内层。传入分层级别的编号或名称即可对其它级别进行unstack操作。即,上面的unstack转换是转换的number这一层。
stack默认会滤除缺失数据,因此该运算是可逆的。
8.3.2 将“长格式”旋转为“宽格式”
多个时间序列数据通常是以所谓的“长格式”(long)或“堆叠格式”(stacked)存储在数据库和CSV中。
8.3.3 将“宽格式”旋转为“长格式”
旋转DataFrame的逆运算是pandas.melt
。
合并多个列称为一个,产生一个比输入长的DataFrame。
当使用pandas.melt
时,必须指明哪些列是分组指标。
例如:
df=pd.DataFrame({'key':['foo','bar','baz'],
'A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9]})
melted=pd.melt(df,['key'])