7. 为了更容易reshaping,重新命名索引层

  1. # 读取college数据集,分组后,统计本科生的SAT数学成绩信息
  2. In[47]: college = pd.read_csv('data/college.csv')
  3. In[48]: cg = college.groupby(['STABBR', 'RELAFFIL'])['UGDS', 'SATMTMID'] \
  4. .agg(['count', 'min', 'max']).head(6)
  5. In[49]: cg
  6. out[49]:

7. 为了更容易reshaping,重新命名索引层 - 图1

  1. # 行索引的两级都有名字,而列索引没有名字。用rename_axis给列索引的两级命名
  2. In[50]:cg = cg.rename_axis(['AGG_COLS', 'AGG_FUNCS'], axis='columns')
  3. cg
  4. out[50]:

7. 为了更容易reshaping,重新命名索引层 - 图2

  1. # 将AGG_FUNCS列移到行索引
  2. In[51]:cg.stack('AGG_FUNCS').head()
  3. out[51]:

7. 为了更容易reshaping,重新命名索引层 - 图3

  1. # stack默认是将列放到行索引的最内层,可以使用swaplevel改变层级
  2. In[52]:cg.stack('AGG_FUNCS').swaplevel('AGG_FUNCS', 'STABBR', axis='index').head()
  3. out[52]:

7. 为了更容易reshaping,重新命名索引层 - 图4

  1. # 在此前的基础上再做sort_index
  2. In[53]:cg.stack('AGG_FUNCS') \
  3. .swaplevel('AGG_FUNCS', 'STABBR', axis='index') \
  4. .sort_index(level='RELAFFIL', axis='index') \
  5. .sort_index(level='AGG_COLS', axis='columns').head(6)
  6. out[53]:

7. 为了更容易reshaping,重新命名索引层 - 图5

  1. # 对一些列做stack,对其它列做unstack
  2. In[54]:cg.stack('AGG_FUNCS').unstack(['RELAFFIL', 'STABBR'])
  3. out[54]:

7. 为了更容易reshaping,重新命名索引层 - 图6

  1. # 对所有列做stack,会返回一个Series
  2. In[55]:cg.stack(['AGG_FUNCS', 'AGG_COLS']).head(12)
  3. out[55]:

7. 为了更容易reshaping,重新命名索引层 - 图7

更多

  1. # 删除行和列索引所有层级的名称
  2. In[56]:cg.rename_axis([None, None], axis='index').rename_axis([None, None], axis='columns')
  3. out[56]:

7. 为了更容易reshaping,重新命名索引层 - 图8