多层索引.ipynb

一.行的多层索引

1.groupby 聚合俩个字段后出现多层索引:MultiIndex

  1. data=mult.groupby(['地区','年份'])['populations'].mean()

走着走着就散了.png

2.构造多层索引”pd.MultiIndex.from_

1.乘积法: product
俩个子列表元素相互乘

  1. multindex1=pd.MultiIndex.from_product([['上海','北京','深圳'],[2010,2018]])

2.数组法:arrays
数据一 一对应

  1. multindex2=pd.MultiIndex.from_arrays([['北京','北京','上海','上海','深圳','深圳'],[2010,2018,2010,2018,2010,2018]])

3.元组法:
参数直接输入多层索引

  1. multindex3=pd.MultiIndex.from_tuples([('上海', 2010),
  2. ('上海', 2018),
  3. ('北京', 2010),
  4. ('北京', 2018),
  5. ('深圳', 2010),
  6. ('深圳', 2018)])

4,将三种方法构建多级索引用于数据返回dataframe

创建dataframe, 数据data传入列的value,index=多级索引,columns=[新命名列]
给索引重新命名:
data3.index.names=[‘city’,’year’]
data3
字符.png

二 .列的多层索引

构造数据:columns 构建俩层列表每个子列表对应一层索引

  1. columns = pd.MultiIndex.from_product([['张三丰', '张无忌', '张翠山'],
  2. ['实际战力', '爆发战力']])
  3. data = [[np.NaN,np.NaN,96.0,100,88.5,90.0],
  4. [90.2,90.4,98.0,50,88.5,90.0],
  5. [95,95.4,96.0,-np.inf,np.NaN,np.NaN],
  6. [96,97.4,98.0,100,np.NaN,np.NaN]]
  7. # 构造战力值(Combat Effectiveness)
  8. ce = pd.DataFrame(data, columns=columns)
  9. ce

先查找.png

索引查看:

zx1.png

构造一个索引切片对象 IndexSlice

  1. idx=pd.IndexSlice
  2. ce.loc[:,idx[:,'实际战力']]
  3. ce.loc[:,idx['张翠山','实际战力']]

zvzvzvm.png

逗号左边对外层索引,右边对外层索引:

idx=pd.IndexSlice
ce.loc[:,idx[:,’实际战力’]]

三.行,列索引一起加上:
创建索引,创建dataframe,index,value都加上创建的多层索引

四. 行列转化
1.test=ce1.unstack(level=1)
2.test.stack(level=1)
五.删除列索引:

五.删除列索引数据不变

第一层,按列删除索引
test.droplevel(1,axis=1)
**
六.特征交叉:

  1. test.columns = ['张三丰年轻女孩在身旁实际战力',
  2. '张三丰实际战力自己单独一人',
  3. '张三丰爆发战力年轻女孩在身旁',
  4. '张三丰爆发战力自己单独一人',
  5. '张无忌实际战力年轻女孩在身旁',
  6. '张无忌实际战力自己单独一人',
  7. '张无忌爆发战力年轻女孩在身旁',
  8. '张无忌爆发战力自己单独一人',
  9. '张翠山实际战力年轻女孩在身旁',
  10. '张翠山实际战力自己单独一人',
  11. '张翠山爆发战力年轻女孩在身旁',
  12. '张翠山爆发战力自己单独一人']

将多层列索引交叉合并为一层索引.