7. 为了更容易reshaping,重新命名索引层
# 读取college数据集,分组后,统计本科生的SAT数学成绩信息
In[47]: college = pd.read_csv('data/college.csv')
In[48]: cg = college.groupby(['STABBR', 'RELAFFIL'])['UGDS', 'SATMTMID'] \
.agg(['count', 'min', 'max']).head(6)
In[49]: cg
out[49]:
# 行索引的两级都有名字,而列索引没有名字。用rename_axis给列索引的两级命名
In[50]:cg = cg.rename_axis(['AGG_COLS', 'AGG_FUNCS'], axis='columns')
cg
out[50]:
# 将AGG_FUNCS列移到行索引
In[51]:cg.stack('AGG_FUNCS').head()
out[51]:
# stack默认是将列放到行索引的最内层,可以使用swaplevel改变层级
In[52]:cg.stack('AGG_FUNCS').swaplevel('AGG_FUNCS', 'STABBR', axis='index').head()
out[52]:
# 在此前的基础上再做sort_index
In[53]:cg.stack('AGG_FUNCS') \
.swaplevel('AGG_FUNCS', 'STABBR', axis='index') \
.sort_index(level='RELAFFIL', axis='index') \
.sort_index(level='AGG_COLS', axis='columns').head(6)
out[53]:
# 对一些列做stack,对其它列做unstack
In[54]:cg.stack('AGG_FUNCS').unstack(['RELAFFIL', 'STABBR'])
out[54]:
# 对所有列做stack,会返回一个Series
In[55]:cg.stack(['AGG_FUNCS', 'AGG_COLS']).head(12)
out[55]:
更多
# 删除行和列索引所有层级的名称
In[56]:cg.rename_axis([None, None], axis='index').rename_axis([None, None], axis='columns')
out[56]: