pandas 笔记:multi-index
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas 笔记:multi-index相关的知识,希望对你有一定的参考价值。
多维度索引
1 前言
比如我们有这么一个DataFrame
data = pd.DataFrame(np.random.randn(5),
index=[['a', 'a', 'a', 'd','d'],
[1, 2, 3, 1, 2]])
那么此时有两列index ,这就是multi-index
mindex = data.index
mindex
'''
MultiIndex([('a', 1),
('a', 2),
('a', 3),
('d', 1),
('d', 2)],
)
'''
2 属性
2.1 levels
不同层级上的属性值
mindex.levels
#FrozenList([['a', 'd'], [1, 2, 3]])
2.2 codes
不同层级上索引元素的位置
mindex.codes
# FrozenList([[0, 0, 0, 1, 1], [0, 1, 2, 0, 1]])
表示第一个索引('a','d') 0号(也就是'a')对应的是第一个列表元素为0的行(前三行);1号(也就是'd')对应的是第一个列表元素为1的行(后两行)
第二个索引(1 2 3) 0号(也就是1)对应的是第二个列表元素为0的行(第一行第四行);1号(也就是'2')对应的是第二个列表元素为1的行(第二行第五行);2号(也就是3)对应的是第二个列表元素为2的行(第三行)
2.3 names
索引的名称(我们这里是没有)
mindex.names
#FrozenList([None, None])
3 构建多层索引
3.1 直接DataFrame 构建
data = pd.DataFrame(np.random.randn(5),
index=[['a', 'a', 'a', 'd',
'd'],[1, 2, 3, 1, 2]])
data
'''
0
a 1 -0.479318
2 -0.471594
3 -1.550214
d 1 0.329446
2 -0.607804
''''
3.2 从列表转化
两个列表相同索引的元素组成一个index
mindex = pd.MultiIndex.from_arrays(
[['a-', 'a-', 'a-', 'a-', 'd-'],
[-1, -2, -3, -1, -2]])
data.reindex(mindex)
'''
0
a- -1 NaN
-2 NaN
-3 NaN
-1 NaN
d- -2 NaN
'''
3.3 从元组转化
mindex = pd.MultiIndex.from_tuples([('a',1), ('a',2), ('b',1)])
data.reindex(mindex)
'''
0
a 1 -1.407190
2 1.193368
b 1 NaN
'''
每一个元组中的元素组成一个index
3.4 使用两个列表的笛卡尔乘积转化
mindex = pd.MultiIndex.from_product([['a','d'], [1,2]])
data.reindex(mindex)
'''
0
a 1 -1.407190
2 1.193368
d 1 -0.343165
2 -0.112372
'''
4 转换多维索引的顺序
将第0维和第一维的索引交换
data.swaplevel(0,1)
'''
0
1 a -1.407190
2 a 1.193368
3 a -0.352287
1 d -0.343165
2 d -0.112372
'''
以上是关于pandas 笔记:multi-index的主要内容,如果未能解决你的问题,请参考以下文章
python pandas multi-index在满足条件的索引级别内选择所有[重复]