【基本工具】S02E12 多级索引Pandas对象的取值、分片与运算方法

0.本集概览

1.Pandas数据类型多级索引的取值方法
2.Pandas数据类型多级索引的分片方法
3.多级Series与DataFrame的转换
4.多级DataFrame的行列统计

接着上一集,说说多级索引下Pandas数据类型的取值方法。

1.多级索引的Series

其实我们只用紧紧抓住一条:多级索引本质还是索引!就是和之前介绍的Series、DataFrame相比,在原来的基础上增加了索引的数据维度。

1.1.多级索引下的取值方法

更直观的,我们举Series的例子来看,继续使用上一集中用到的pop数据对象:
代码片段:

California  2008    33870000
            2018    37250000
New York    2008    18970000
            2018    19370000
Texas       2008    20850000
            2018    25140000
dtype: int64

首先,可以通过指定每个索引值来获取单个元素值,我们看看2008年New York的人口数量:
代码片段:

print(pop['New York',2008])

运行结果:

18970000

好,那如果我们只想指定二维索引中的其中一个索引,比如,我们只想看看New York所有年份的人口数呢?
代码片段:

print(pop['New York'])

代码片段:

2008    18970000
2018    19370000
dtype: int64

同理,我们想看看2008所有州的人口数据呢?
代码片段:

print(pop[:,2008])

运行结果:

California    33870000
New York      18970000
Texas         20850000
dtype: int64

1.2.多级索引下的切片方法

看上去不难,那我们再试试切片的使用?也分别针对两个不同的索引。

没问题,先对州索引进行切片,我们看看从加州到纽约的人口数据:
代码片段:

print(pop.loc['California':'New York'])

运行结果:

California  2008    33870000
            2018    37250000
New York    2008    18970000
            2018    19370000
dtype: int64

然后再对另一个索引进行切片,看看2008到2018年所有州的人口数据
代码片段:

print(pop.loc[:, 2008:2018])

运行结果:

California  2008    33870000
            2018    37250000
New York    2008    18970000
            2018    19370000
Texas       2008    20850000
            2018    25140000
dtype: int64

结合之前学过的过滤取值和花哨索引也是一样,其实多级索引就是多了一维索引数据而已,本质上并无二异,我们利用过滤语法看看大于30000000的州和年份:
代码片段:

print(pop[pop > 30000000])

运行结果:

California  2008    33870000
            2018    37250000
dtype: int64

像我们之前使用的花哨索引,跳过纽约州,单独取加州和德州的数据,手法上都是一样的:
代码片段:

print(pop[['California', 'Texas']])

运行结果:

California  2008    33870000
            2018    37250000
Texas       2008    20850000
            2018    25140000
dtype: int64

2.多级索引的DataFrame

2.1.多级索引下的取值方法

接下来我们再看看DataFrame的多级索引如何使用,我们使用上一集中的那个四维DataFrame对象df_data来举例:
代码片段:

name             Tom                Bill          
age               22        18        22        18
year visit                                        
2008 1      0.676136 -1.782380 -1.535020 -1.449538
     2     -0.064762  0.357951  0.825011 -1.569631
2018 1      1.458805  0.012029 -0.569635  0.558863
     2     -0.350953 -0.848883  0.954154 -0.744795

因为DataFrame数据类型的基本索引是列索引,索引首先是应用到列上:

首先访问Tom的数据,数据也因此从四维降维到了三维:
代码片段:

print(df_data['Tom'])

运行结果:

age               22        18
year visit                    
2008 1      0.676136 -1.782380
     2     -0.064762  0.357951
2018 1      1.458805  0.012029
     2     -0.350953 -0.848883

再进一步,访问Tom年龄为22岁时的数据,将三维DataFrame降维变成了二维Series对象:
代码片段:

print(df_data['Tom',22])

运行结果:

year  visit
2008  1        0.676136
      2       -0.064762
2018  1        1.458805
      2       -0.350953
Name: (Tom, 22), dtype: float64

后续选择2008年的数据,将二维Series降为一维:
代码片段:
```

top Created with Sketch.