python:pandas(5),层次化索引
来源:互联网 发布:软件系统可靠性设计 编辑:程序博客网 时间:2024/06/05 08:07
利用python进行数据分析
第五章:pandas入门
第五节,层次化索引
层次化索引(hierarchical indexing)可使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低维度形式处理高维度数据。 >>> data=Series(np.random.randn(10), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'], [1,2,3,1,2,3,1,2,2,3]])
>>> data
a 1 -1.800271
··2 -0.870764
··3 0.600804
b 1 -0.643546
··2 -0.355527
··3 1.599922
c 1 0.213821
··2 2.210991
d 2 -0.309903
··3 0.130301
dtype: float64
>>> data.index
MultiIndex(levels=[[u'a', u'b', u'c', u'd'], [1, 2, 3]], labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])
结果是索引之间的“间隔”表示“直接使用上面的标签” >>> data['b']
#选取外层索引 1 -1.871382
2 -0.941952
3 -0.571710
dtype: float64
>>> data['b'][1]
#选取外层索引当中的内层索引 -1.8713820461721136
>>> data['b':'c']
>>>> data.ix[['b','c']]
#去除两列索引的方法 b 1 -1.871382
··2 -0.941952
··3 -0.571710
c 1 1.508512
··2 0.191091
dtype: float64
>>> data[:,2]
#直接选取内层索引 a -0.101509
b -0.941952
c 0.191091
d 0.007460
dtype: float64
对于多个层次化索引使用unstack方法可被重新安排到一个DataFrame中 >>> type(data)
<class 'pandas.core.series.Series'>
>>> data.unstack()
····1 2 3
a -0.647166 -0.101509 -0.077394
b -1.871382 -0.941952 -0.571710
c 1.508512 0.191091 NaN
d NaN 0.007460 -0.585483
>>> type(data.unstack())
<class 'pandas.core.frame.DataFrame'>
unstack的逆运算是stack >>> data.unstack().stack()
a 1 -1.800271
··2 -0.870764
··3 0.600804
b 1 -0.643546
··2 -0.355527
··3 1.599922
c 1 0.213821
··2 2.210991
d 2 -0.309903
··3 0.130301
dtype: float64
对于pandas的Series对象可以在横轴设定多层次化索引,而对于一个DataFrame其每条轴都可以有分层次索引 >>> frame=DataFrame(np.arange(12).reshape((4,3)), index=[['a', 'a', 'b', 'b'], [1,2,1,2]], columns=[['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']])
>>> frame
····Ohio····Colorado
··Green Red··Green
a 1 0 1 2
··2 3 4 5
b 1 6 7 8
··2 9 10 11
对于横轴来说a和b外层索引分别存在两个索引(1和2),而对于横轴来说Ohio这个外层索引有两个索引(Green和Red)对于Colorado来说只有一个内层索引Green
各层索引均可以命名 >>> frame.index.names=['key1', 'key2']
>>> frame.columns.names=['state', 'color']
>>> frame
state····Ohio····Colorado
color·Green Red····Green
key1·key2
a·1 0 1 2
··2 3 4 5
b·1 6 7 8
··2 9 10 11
1,从排分级顺序
有时需要重新调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序,swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不会发生编号) >>> frame.swaplevel('key1', 'key2')
state····Ohio····Colorado
color··Green Red····Green
key2··key1
··1····a 0 1 2
··2····a 3 4 5
··1····b 6 7 8
··2····b 9 10 11
但只能进行横轴索引进行分级排序,如果想通过纵轴索引进行分级排序需要加入axis=1参数 >>> frame.swaplevel('state', 'color', axis=1)
color··Green··Red··Green
state··Ohio··Ohio··Colorado
key1 key2
a·····1 0 1 2
······2 3 4 5
b·····1 6 7 8
······2 9 10 11
2,根据级别汇总统计
许多对DataFrame和Series的描述和汇总统计都有一个level选项,它用于指定在某条轴上求和的级别。再以上面那个DataFrame为例,可根据行或列上的级别来进行求和 >>> frame.sum(level='key2')
state····Ohio··Colorado
color Green Red Green
key2
1··6 8 10
2··12 14 16
>>> frame.sum(level='color', axis=1)
color Green Red
key1·key2
··a···1 2 1
······2 8 4
··b···1 14 7
······2 20 10
3,使用DataFrame的列
>>> frame=DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd': [0,1,2,0,1,2,3]})
>>> frame
··a·b··c··d
0 0 7 one 0
1 1 6 one 1
2 2 5 one 2
3 3 4 two 0
4 4 3 two 1
5 5 2 two 2
6 6 1 two 3
DataFrame的set_index函数会将其一个或多个列转换为行索引,并创建一个新的DataFrame >>> frame2=frame.set_index(['c', 'd'])
>>> frame2
······a b
·c··d
one 0 0 7
····1 1 6
····2 2 5
two 0 3 4
····1 4 3
····2 5 2
····3 6 1
set_index方法默认情况下会将索引列的数据移除,但加入drop=False参数可将数据保留下来 >>> frame2=frame.set_index(['c', 'd'], drop=False)
>>> frame2
······a·b··c··d
·c··d
one 0 0 7 one 0
····1 1 6 one 1
····2 2 5 one 2
two 0 3 4 two 0
····1 4 3 two 1
····2 5 2 two 2
····3 6 1 two 3
reset_ index的功能是和set_index正好相反,层次化索引的级别会被转移到列里面
- python:pandas(5),层次化索引
- pandas层次化索引
- pandas层次化索引
- pandas层次化索引
- 利用Python进行数据分析(11) pandas基础: 层次化索引
- 利用Pandas进行数据分析(3)——统计、处理缺失值、层次化索引
- python pandas 序列索引
- python pandas 位置索引
- python3.5——Pandas模块使用(下)——缺失值处理和层次索引
- pandas之汇总和计算描述统计到层次化索引
- python/pandas数据分析(十六)- 数据索引与选取
- 【Python数据分析与展示】(六)处理缺失数据,层次化索引
- Python-Pandas(6)数据索引变换
- pandas DataFrame 索引(二)
- python/pandas/numpy数据分析(十)-函数, rank,重复索引
- python科学计算笔记(四)pandas 数据索引与选取
- pandas 索引选取和过滤(四)
- python pandas 对series和dataframe的重置索引reindex
- centos7更新系统内核及软件
- Leetcode : Edit Distance
- Realm For Android详细教程
- CentOS命令
- 现阶段学习计划
- python:pandas(5),层次化索引
- 所见即所得:四款免编程移动游戏开发引擎推荐
- 作业
- Codeforces847K Travel Cards
- PHP实现限制域名从而保护源代码不被拷贝
- Number of Islands
- Python入门系列9:set 集合
- maven配置
- Codeforces847M Weather Tomorrow