【进阶篇】使用Pandas的数据重塑函数进行数据透视和堆叠操作
发布时间: 2024-06-24 16:37:47 阅读量: 85 订阅数: 128
![【进阶篇】使用Pandas的数据重塑函数进行数据透视和堆叠操作](https://img-blog.csdnimg.cn/20190729195909770.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NjcwODAz,size_16,color_FFFFFF,t_70)
# 2.1 pivot_table函数的基本用法
Pandas的`pivot_table`函数是执行数据透视操作的核心工具。它允许您根据指定的行索引、列索引和值聚合函数对数据进行分组和汇总。
### 2.1.1 指定行索引和列索引
`pivot_table`函数的第一个参数`index`指定行索引,第二个参数`columns`指定列索引。这些参数可以是单个列名或列名列表。例如,以下代码将`df`数据框按`gender`列分组,按`age`列分组:
```python
df.pivot_table(index='gender', columns='age')
```
### 2.1.2 指定值聚合函数
`pivot_table`函数的第三个参数`values`指定要应用于分组数据的聚合函数。该函数可以是任何NumPy聚合函数,例如`sum`、`mean`或`max`。例如,以下代码计算每个性别和年龄组的平均得分:
```python
df.pivot_table(index='gender', columns='age', values='score', aggfunc='mean')
```
# 2. 数据透视操作
数据透视操作是 Pandas 中一种强大的工具,它允许您对数据进行汇总、分组和聚合。最常用的数据透视函数是 `pivot_table` 函数,它可以根据指定的行索引、列索引和值聚合函数来创建数据透视表。
### 2.1 pivot_table 函数的基本用法
#### 2.1.1 指定行索引和列索引
`pivot_table` 函数的基本用法如下:
```python
df.pivot_table(index=行索引, columns=列索引, values=值聚合函数)
```
其中:
* `index` 参数指定行索引,它可以是单个列或多个列。
* `columns` 参数指定列索引,它也可以是单个列或多个列。
* `values` 参数指定值聚合函数,它可以是 Pandas 中内置的聚合函数,如 `sum`、`mean`、`max` 等。
例如,以下代码创建了一个数据透视表,其中行索引是 `年份` 列,列索引是 `国家` 列,值聚合函数是 `总人口` 列的求和:
```python
df.pivot_table(index='年份', columns='国家', values='总人口', aggfunc='sum')
```
#### 2.1.2 指定值聚合函数
`pivot_table` 函数支持多种值聚合函数,包括:
* `sum`:求和
* `mean`:求平均值
* `max`:求最大值
* `min`:求最小值
* `count`:求计数
您还可以使用自定义聚合函数,如下所示:
```python
def my_aggfunc(values):
return values.max() - values.min()
df.pivot_table(index='年份', columns='国家', values='总人口', aggfunc=my_aggfunc)
```
#### 2.1.3 处理缺失值和重复值
`pivot_table` 函数提供了处理缺失值和重复值的方法。对于缺失值,您可以使用 `dropna` 参数来删除包含缺失值的行或列。对于重复值,您可以使用 `aggfunc` 参数来指定如何处理重复值,例如求和或求平均值。
例如,以下代码创建了一个数据透视表,其中缺失值被删除,重复值的总人口被求和:
```python
df.pivot_table(index='年份', columns='国家', values='总人口', aggfunc='sum', dropna=True)
```
### 2.2 pivot_table 函数的高级用法
#### 2.2.1 多级索引的处理
`pivot_table` 函数可以处理多级索引。例如,以下代码创建了一个数据透视表,其中行索引是 `年份` 列和 `季度` 列,列索引是 `国家` 列,值聚合函数是 `总人口` 列的求和:
```python
df.pivot_table(index=['年份', '季度'], columns='国家', values='总人口', aggfunc='sum')
```
#### 2.2.2 自定义聚合函数
您可以使用自定义聚合函数来实现更复杂的聚合操作。例如,以下代码创建了一个数据透视表,其中值聚合函数是计算每个国家的人口增长率:
```python
def growth_rate(values):
return (values[-1] - values[0]) / values[0]
df.pivot_table(index='年份', columns='国家', values='总人口', aggfunc=growth_rate)
```
#### 2.2.3 过滤和排序数据
`pivot_table` 函数提供了过滤和排序数据的方法。您可以使用 `filter` 参数来过滤数据,例如只显示人口超过 1000 万的国家。您还可以使用 `sort_values` 参数对数据进行排序,例如按人口降序排序。
例如,以下代码创建了一个数据透视表,其中只显示人口超过 1000 万的国家,并按人口降序排序:
```python
df.pivot_table(index='年份', columns='国家', values='总人口', aggfunc='sum', filter=lambda x: x['总人口'] > 10000000).sort_values('总人口', ascending=False)
```
# 3.1 stack函数的基本用法
#### 3.1.1 将多级索引转换为单级索引
stack函数的基本用法是将多级索引转换为单级索引。它通过将行索引和列索引中的值组合成一个新的索引来实现这一点。
```python
import pandas as pd
# 创建一个带有多级索引的数据框
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9
```
0
0