pandas MultiIndex多级索引实例:美国城市宜居性、创业投资记录
美国250个城市的宜居性:neighborhoods.csv
链接:https://pan.baidu.com/s/1wThRBDU1DUyk5blmGHyE0Q?pwd=1234
1. 多级索引的读取
直接读取可见,neighborhoods.csv包含三级索引,但并未被识别出:

使用index_col = [0, 1, 2]把左边三列转为index,使用header = [0, 1]把上面两行转为header:

现在,左边的行名index是一个三元素的元组,例如:('MO', 'Fisherborough', '244 Tracy View')

上边的列名column是一个两元素元组,例如:(Culture, Restaurants)

对于index的index(也就是MultiIndex),用neighborhoods.index.names表示:

对于column的index(也就是MultiIndex),尚未赋值。可通过如下方法赋值:
显示效果如下:(也位于左上角)

从MultiIndex中获得index,采用get_level_values():


对唯一值的数量(num)计数是用.nuique:

查看唯一值是用.unique():(关于行列的提取方式,参见3. 行列提取)

2. 排序
按多级index按顺序排:neighborhoods.sort_index()

自定义升降序:
自定义参与排序:
和二维DataFrame一样,添加axis = 1可实现对column排序:
3. 行列提取
3.1 列提取
必须以元组的形式,一级一级。
单列:Series,不显示column
多列:DataFrame,会显示column
3.2 行提取
使用.loc:
3.3 行列提取
为避免歧义,建议分别使用两个元组:(元组内的第二个可以是同级,也可以是次级)
输出:

跨首级选择:灵活使用列表

常规切片:(首尾包含)
数字切片:(有首无尾,闭开区间)
4. 交叉选择(x select)
仅通过一个级别定位值,即使不是首级:.xs()
例1:二级index是"Lake Nicole"定位
例2:二级column是"Museums"定位
多重要求则用元组。
5. 修改index索引
5.1 去掉索引
MultiIndex顺序修改:reorder_levels()
重置索引为默认的数字形式:reset_index()

从index移动到DataFrame的column:

使用drop删除选中MultiIndex:
5.2 添加索引
目前是纯数字索引:

使用set_index(key=)添加:
如果是二级column:
6. 示例:数据整理
创建创业投资记录investments.csv的三级MultiIndex。
先查看唯一值的量,以决定分级:

选择3 -> 16 -> 61:
输出效果:
