【进阶篇】Pandas库高级操作:多层索引与数据透视表深入解析
发布时间: 2024-06-24 15:32:06 阅读量: 110 订阅数: 143
学习pandas数据透视表
![【进阶篇】Pandas库高级操作:多层索引与数据透视表深入解析](https://img-blog.csdnimg.cn/direct/b60a3bde76f446ba96b7fdcd081d81f9.png)
# 2.1 多层索引的创建和操作
### 2.1.1 基于现有索引创建多层索引
```python
import pandas as pd
# 创建一个单层索引的 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 将单层索引转换为多层索引
df.set_index(['A', 'B'], inplace=True)
print(df)
```
输出:
```
A B
A B
1 4 1
1 5 2
1 6 3
```
在这个例子中,`set_index()` 方法将 `A` 和 `B` 列作为多层索引。结果是一个多层索引 DataFrame,其中索引的每一层对应于 `A` 和 `B` 列的值。
# 2. 多层索引的深入解析
### 2.1 多层索引的创建和操作
#### 2.1.1 基于现有索引创建多层索引
```python
import pandas as pd
# 创建一个单层索引的数据框
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
df.index.names = ['Level_1']
# 基于现有索引创建多层索引
df.index = pd.MultiIndex.from_product([df.index, ['L1', 'L2']])
# 查看多层索引
print(df.index)
```
**代码逻辑分析:**
* `pd.MultiIndex.from_product()` 函数用于创建多层索引,它接受一个元组列表作为参数,其中每个元素代表一个索引层。
* 在本例中,我们使用 `df.index`(即单层索引)和一个列表 `['L1', 'L2']` 创建了一个包含两个索引层的索引。
* `df.index` 赋值为 `pd.MultiIndex.from_product([df.index, ['L1', 'L2']])` 后,`df` 的索引就变成了一个多层索引。
#### 2.1.2 基于多个列创建多层索引
```python
# 创建一个具有多个列的数据框
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': ['x', 'y', 'z']})
# 基于多个列创建多层索引
df.set_index(['A', 'B'], inplace=True)
# 查看多层索引
print(df.index)
```
**代码逻辑分析:**
* `df.set_index()` 函数用于将指定列设置为索引。
* 在本例中,我们使用 `['A', 'B']` 参数将 `A` 和 `B` 列设置为索引。
* 因此,`df` 的索引就变成了一个包含两层的多层索引。
### 2.2 多层索引的查询和筛选
#### 2.2.1 基于单个索引层查询
```python
# 基于单个索引层查询
result = df.loc[(slice(None), 'L1')]
# 查看查询结果
print(result)
```
**代码逻辑分析:**
* `df.loc` 函数用于基于索引标签进行查询。
* 在本例中,我们使用 `(slice(None), 'L1')` 参数查询索引第一层为 `None`(即所有值)且第二层为 `'L1'` 的行。
* `slice(None)` 表示选择索引第一层的全部值。
#### 2.2.2 基于多个索引层查询
```python
# 基于多个索引层查询
result = df.loc[(slice(None), 'L1', 2)]
# 查看查询结果
print(result)
```
**代码逻辑分析:**
* 在本例中,我们使用 `(slice(None), 'L1', 2)` 参数查询索引第一层为 `None`(即所有值)、第二层为 `'L1'` 且第三层为 `2` 的行。
### 2.3 多层索引的排序和分组
#### 2.3.1 基于单个索引层排序
```python
# 基于单个索引层排序
result = df.sort_index(level=0)
# 查看排序结果
print(result)
```
**代码逻辑分析:**
* `df.sort_index()` 函数用于对索引进行排序。
* `level` 参数指定要排序的索引层。
* 在本例中,我们使用 `level=0` 参数对索引的第一层进行排序。
#### 2.3.2 基于多个索引层排序
```python
# 基于多个索引层排序
result = df.sort_index(level=[0, 1])
# 查看排序结果
print(result)
```
**代码逻辑分析:**
* 在本例中,我们使用 `level=[0, 1]` 参数对索引的第一层和第二层进行排序。
#### 2.3.3 基于索引层分组
```python
# 基于索引层分组
result = df.groupby(level=0).sum()
# 查看分组结果
print(result)
```
**代码逻辑分析:**
* `df.groupby()` 函数用于对数据进行分组。
* `level` 参数指定要分组的索引层。
* 在本例中,我们使用 `level=0` 参数对索引的第一层进行分组。
# 3. 数据透视表的深入应用
### 3.1 数据透视表的创建和基本操作
#### 3.1.1 基于单一索引层创建数据透视表
数据透视表是基于一个或多个索引层对数据进行聚合和分组的强大工具。要基于单一索引层创建数据透视表,可以使用 `pivot_table()` 函数。该函数的基本语法如下:
```python
df.pivot_table(index=index_col, columns=column_col, values=value_col, aggfunc=aggfunc)
```
其中:
* `index_col`:指定用作行索引的列
* `column_col`:指定用作列索引的列
* `values_col`:指定要聚合的值列
* `aggfunc`:指定
0
0