任务描述
本关任务:根据相关知识完成编程要求并输出目标数据。
相关知识
多级索引行列转换
使用多级索引的关键是掌握有效数据转换的方法,Pandas
提供了许多操作,可以让数据在内容保持不变的同时,按照需要进行行列转换。上一关我们用stack()
和unstack()
演示过简单的行列转换,但其实还有许多合理控制层级行列索引的方法,让我们来一探究竟。
-
有序和无序的索引;
如果MultiIndex
不是有序的索引,那么大多数切片操作都会失败,如下例:# 首先创建一个不按字典顺序排列的多级索引Series
index = pd.MultiIndex.from_product([['a', 'c', 'b'], [1, 2]])
data = pd.Series(np.random.rand(6), index=index)
data.index.names = ['char', 'int']
data
Out:
char int
a 1 0.003001
2 0.164974
c 1 0.741650
2 0.569264
b 1 0.001693
2 0.526226
dtype: float64
# 如果对该多级索引使用局部切片,就会报错
try:
data['a':'b']
except KeyError as e:
print(type(e))
print(e)
Out:
<class 'KeyError'>
'Key length (1) was greater than MultiIndex lexsort depth (0)'
问题是出在
MultiIndex
无序排列上,局部切片和许多其他相似的操作都要求MultiIndex
的各级索引是有序的。为此,Pandas
提供了许多便捷的操作完成排序,如sort_index()
和sortlevel()
方法。data = data.sort_index()