先是对Series来说
import numpy as np
import pandas as pd
# 两层索引对于Series对象来说,没有columns
sum_series=pd.Series([15848,13472,12073.8,7813,7446,6444,15230,8269],index=[
['河北省','河北省','河北省','河北省',
'河南省','河南省','河南省','河南省'],
['石家庄市','唐山市','邯郸市','秦皇岛市',
'郑州市','开封市','洛阳市','新乡市']])
print(sum_series)
# 多层索引
sum_series=pd.Series([15848,13472,12073.8,7813,7446,6444,15230,8269],index=[
['河北省','河北省','河北省','河北省',
'河南省','河南省','河南省','河南省'],
['石家庄市','唐山市','邯郸市','秦皇岛市',
'郑州市','开封市','洛阳市','新乡市']])
print(sum_series)
# ---------------------------下面是输出结果------------------------------
河北省 石家庄市 15848.0
唐山市 13472.0
邯郸市 12073.8
秦皇岛市 7813.0
河南省 郑州市 7446.0
开封市 6444.0
洛阳市 15230.0
新乡市 8269.0
dtype: float64
--------------------------------------------
河北省 石家庄市 15848.0
唐山市 13472.0
邯郸市 12073.8
秦皇岛市 7813.0
河南省 郑州市 7446.0
开封市 6444.0
洛阳市 15230.0
新乡市 8269.0
dtype: float64
对DataFrame来说
# 对于DataFrame对象来说(可以增加列索引)
sum_df=pd.DataFrame([15848,13472,12073.8,7813,7446,6444,15230,8269],index=[
['河北省','河北省','河北省','河北省',
'河南省','河南省','河南省','河南省'],
['石家庄市','唐山市','邯郸市','秦皇岛市',
'郑州市','开封市','洛阳市','新乡市']],
columns=["占地面积"])
print(sum_df)
# ---------------------------下面是输出结果-----------------------------
占地面积
河北省 石家庄市 15848.0
唐山市 13472.0
邯郸市 12073.8
秦皇岛市 7813.0
河南省 郑州市 7446.0
开封市 6444.0
洛阳市 15230.0
新乡市 8269.0
MultiIndex方法
from_tuples
# MultiIndex.from_tuples():将元组列表转换为MultiIndex
# MultiIndex.from_arrays():将数组列标转换为MultiIndex
# MultiIndex.from_product():从多个集合的笛卡尔乘积中创建一个MultiIndex
# 使用上面的任意一种方法,都可以返回一个MultiIndex类对象,里面有三个重要的属性,分别是levels,labels,names
# levels表示每个级别的唯一标签
# labels表示每一个索引列中每个元素在levels中对应的第几个元素
# names表示可以设置索引等级名称
# 通过from_tuples()方法创建MultiIndex对象
from pandas import MultiIndex
# 创建包含多个元组的列表
list_tuples=[('A','A1'),('A','A2'),('B','B1'),('B','B2'),('B','B3')]
# 根据元组列表创建一个MultiIndex对象(元组的第一个元素是外层索引,第二个元素是内层索引)
multi_index=MultiIndex.from_tuples(list_tuples,names=['外层索引','内层索引'])
multi_index
# -------------------------------- 输出结果为-------------------------------
MultiIndex([('A', 'A1'),
('A', 'A2'),
('B', 'B1'),
('B', 'B2'),
('B', 'B3')],
names=['外层索引', '内层索引'])
# 接下来创建一个DataFrame对象,把刚刚的multi_index传给index
import pandas as pd
values=[[1,2,3],[5,2,3],[2,5,6],[7,8,9],[3,6,7]]
de_index=pd.DataFrame(data=values,index=multi_index)
de_index
#-------------------------------输出结果为--------------------------------
0 1 2
外层索引 内层索引
A A1 1 2 3
A2 5 2 3
B B1 2 5 6
B2 7 8 9
B3 3 6 7
from_arrays
# 通过from_arrays()创建MultiIndex对象(数组的第一列和第二列元素个数一定要相等,不然会报错)
from pandas import MultiIndex
# 根据列表去创建一个MultiIndex对象(用二维数组来进行)
multi_array=MultiIndex.from_arrays([['A','B','A','B','B'],
['A1','A2','B1','B2','B3']],
names=['外层索引','内层索引'])
multi_array
# ------------------------------------输出结果为-----------------------------------
MultiIndex([('A', 'A1'),
('B', 'A2'),
('A', 'B1'),
('B', 'B2'),
('B', 'B3')],
names=['外层索引', '内层索引'])
# 接下来创建一个DataFrane对象
import pandas as pd
# 如果外层索引是两个连续的值,那么会进行约简
df_array=pd.DataFrame([[1,2,3],[5,2,3],[2,5,6],[7,8,9],[3,6,7]],index=multi_array)
df_array
# ---------------------------------输出结果为-----------------------------------
0 1 2
外层索引 内层索引
A A1 1 2 3
B A2 5 2 3
A B1 2 5 6
B B2 7 8 9
B3 3 6 7
from_product(笛卡尔积)
# 通过MultiIndex.from_product方法创建MultiIndex对象(这是将二维数组的第一列和第二列进行笛卡尔积)
from pandas import MultiIndex
multi_product=MultiIndex.from_product([['A','B'],
['A1','A2','B2','B3']],
names=['外层索引','内层索引'])
multi_product
# -----------------------------------下面是输出结果-----------------------------------
MultiIndex([('A', 'A1'),
('A', 'A2'),
('A', 'B2'),
('A', 'B3'),
('B', 'A1'),
('B', 'A2'),
('B', 'B2'),
('B', 'B3')],
names=['外层索引', '内层索引'])
import pandas as pd
# 创建一个DataFrame对象
df_product=pd.DataFrame([[1,2,3],[5,2,3],[2,5,6],[7,8,9],[3,6,7],[3,2,4],[4,5,6],[7,3,9]],index=multi_product)
df_product
# --------------------------------------下面是输出结果--------------------------------------
0 1 2
外层索引 内层索引
A A1 1 2 3
A2 5 2 3
B2 2 5 6
B3 7 8 9
B A1 3 6 7
A2 3 2 4
B2 4 5 6
B3 7 3 9
根据表格进行层次化索引操作
from pandas import Series
# 索引相当于是二维数组,第一列是外层索引(相同的会不显示),第二列相当于是内层索引,data就是数据
book=pd.Series([50,60,40,94,63,101,200,56,45],index=[['小说','小说','小说',
'散文随笔','散文随笔','散文随笔',
'传记','传记','传记'],
['《平凡的世界》','《骆驼祥子》','《狂人日记》',
'《皮囊》','《浮生六记》','《自在独行》',
'《曾国藩》','《老舍自传》','《知行合一王阳明》']])
print(book)
# 获取内层索引对应的子集(内层索引相当于是列名)
book[:,'《自在独行》']
#-----------------------------------下面是输出结果----------------------------------------
小说 《平凡的世界》 50
《骆驼祥子》 60
《狂人日记》 40
散文随笔 《皮囊》 94
《浮生六记》 63
《自在独行》 101
传记 《曾国藩》 200
《老舍自传》 56
《知行合一王阳明》 45
dtype: int64
------------------------------------------------
散文随笔 101
dtype: int64
# 交换分层顺序的操作可以用swaplevel()方法来进行
book.swaplevel()
#-----------------------------------下面是输出结果-----------------------------------
《平凡的世界》 小说 50
《骆驼祥子》 小说 60
《狂人日记》 小说 40
《皮囊》 散文随笔 94
《浮生六记》 散文随笔 63
《自在独行》 散文随笔 101
《曾国藩》 传记 200
《老舍自传》 传记 56
《知行合一王阳明》 传记 45
dtype: int64
分层排序
#sort_index(axis=0,level=None,ascending=True,inplace=False,kind='quicksort',na_position='last',sort_remaining=True,by=None)
from pandas import DataFrame
# 构造对象并进行实例化操作
data=pd.DataFrame({'word':['a','b','c','d','e','f','g','h','i'],'num':[1,2,3,4,5,6,7,8,9]},
index=[['A','A','A','B','B','B','C','C','C'],[1,2,3,3,2,1,2,1,3]])
print(data)
# 进行排序
print(data.sort_index())
#--------------------------------------下面是输出结果----------------------------------------
word num
A 1 a 1
2 b 2
3 c 3
B 3 d 4
2 e 5
1 f 6
C 2 g 7
1 h 8
3 i 9
word num
A 1 a 1
2 b 2
3 c 3
B 1 f 6
2 e 5
3 d 4
C 1 h 8
2 g 7
3 i 9
按num列进行降序排列,data.sort_index(by=['num'],ascending = False)