pandas层次化索引
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
- 创建多层行索引
从一个文件中读取一个多层级索引的表
df = pd.read_excel(’./data/data.xlsx’, sheet_name=1, header=[0,1])
df
---------------------------------
上半年 下半年
北京 上海 广州 北京 上海 广州
手机 89 90 100 88 130 104
电脑 90 68 98 98 127 120
键盘 78 90 100 100 130 115
NaN 0 1 2 3 4 5
product
product = [["上半年","下半年"],["北京","上海","广州"]]
array
array = [[“上半年”,“上半年”,“上半年”,“下半年”,“下半年”,“下半年”],[“北京”,“上海”,“广州”,“北京”,“上海”,“广州”]]
tuple
tuples = [[“上半年”,“北京”],[“上半年”,“上海”],[“上半年”,“广州”],[“下半年”,“北京”],[“下半年”,“上海”],[“下半年”,“广州”]]
- 隐式构造
最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组
- Series也可以创建多层索引
data = np.random.randint(0,200,size=(3,6))
index = [“手机”,“电脑”,“键盘”]
# 隐式构造只支持使用数组表达多级索引的方式来进行构造,不常用
df = DataFrame(data=data, index=index, columns=array)
df
----------------------------------
上半年 下半年
北京 上海 广州 北京 上海 广州
手机 147 185 181 126 131 197
电脑 61 185 172 177 95 59
键盘 152 105 79 70 99 8
- 显示构造pd.MultiIndex
-
使用数组
column1 = pd.MultiIndex.from_arrays(array)
DataFrame(data=data, index=index, columns=column1)
-----------------------------------
上半年 下半年
北京 上海 广州 北京 上海 广州
手机 134 192 192 187 70 182
电脑 2 177 162 2 93 121
键盘 164 189 184 125 114 155 -
使用tuple
column2 = pd.MultiIndex.from_tuples(tuples)
DataFrame(data=data, index=index, columns=column1)
-----------------------------
上半年 下半年
北京 上海 广州 北京 上海 广州
手机 134 192 192 187 70 182
电脑 2 177 162 2 93 121
键盘 164 189 184 125 114 155 -
使用product
最简单,推荐使用
column3 = pd.MultiIndex.from_product(product)
DataFrame(data=data, index=index, columns=column1)----------------------------------------- 上半年 下半年 北京 上海 广州 北京 上海 广州 手机 134 192 192 187 70 182 电脑 2 177 162 2 93 121 键盘 164 189 184 125 114 155 # 构建一个多层级的行索引表 DataFrame(data=data.reshape(6,3), index=column1, columns=index) ------------------------------------------------------- 手机 电脑 键盘 上半年 北京 170 178 79 上海 161 72 159 广州 53 31 137 下半年 北京 167 77 179 上海 45 121 96 广州 106 34 39
============================================
练习8:
- 创建一个Data