2022/3/14 4.9 透视表和重塑dataframe
In [ ]: import numpy as np
import pandas as pd
在数据分析中,常常需要用到数据透视表和交叉表,下面介绍pandas.DataFrame.pivot_table数据透视表和pandas.DataFrame.crosstab交叉表的用
法和区别。
4.9.1 数据透视表
典型的数据格式是扁平的,只包含行和列,不方便总结信息。数据透视表(pivot table) 是一种类似GroupBy的操作方法,常见于Excel中。数据透视
表将每一列数据作为输入,输出将数据不断细分为多个维度累计信息的二维数据表。
数据透视表用来做数据透视,可以通过一个或多个键分组聚合DataFrame中的数据,通过aggfunc参数决定聚合类型,是groupby的高级功能。
透视表就是将指定原有DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数(默认情况下式mean函数)。
为什么要使用pivot_table?
灵活性高,可以随意定制你的分析计算要求
脉络清晰易于理解数据
操作性强,报表神器
在Python数据分析领域,`pandas`库提供了强大的数据处理能力,其中包括了数据透视表和交叉表的功能。数据透视表和交叉表是数据整理和分析的重要工具,尤其在处理大量扁平化数据时,能帮助我们快速提取关键信息并进行多维度的统计分析。
**数据透视表(pivot_table)**
数据透视表是一种高级的`groupby`操作,它允许用户通过一个或多个键对数据进行分组和聚合,以创建一个多维视角的数据摘要。在`pandas`中,`pivot_table`函数用于实现这一功能。它可以根据不同列的数据创建新的行和列索引,然后对特定列应用聚合函数,如平均值、总和、计数等,默认的聚合函数是平均值(`mean`)。
**pivot_table函数调用参数**
- `data`: 需要进行透视操作的`DataFrame`对象。
- `values`: 指定需要进行聚合运算的列名,可以是单个列或列的列表。
- `index`: 作为新表格行索引的列名,同样可以是单个或列表形式。
- `columns`: 作为新表格列索引的列名,也是单个或列表形式。
- `aggfunc`: 指定的聚合函数,默认是`numpy.mean`,也可以是其他统计函数或多个函数的列表。
- `fill_value`: 用于填充缺失值的值。
- `margin`: 是否添加所有行/列的总计,默认为`False`。
- `dropna`: 是否忽略包含`NaN`的列,默认为`True`。
- `margins_name`: 当`margin=True`时,总计行/列的名称。
**示例应用**
1. **按性别统计不同籍贯的学号数目**:
```python
pd.pivot_table(st, values='学号', index='性别', columns='籍贯', aggfunc=len)
```
2. **按性别和籍贯统计学号数目**:
```python
pd.pivot_table(st, values='学号', index=['性别', '籍贯'], aggfunc=len)
```
3. **按性别统计不同籍贯的身高和体重最大值**:
```python
pd.pivot_table(st, values=['身高', '体重'], index='性别', columns='籍贯', aggfunc=np.max)
```
4. **按性别和籍贯统计体重和身高的最大最小值**:
```python
pd.pivot_table(st, values=['身高', '体重'], index=['性别', '籍贯'], aggfunc=(np.max, np.min))
```
5. **按性别统计不同籍贯的年龄之和,并提供分项汇总统计**:
```python
# 示例代码未给出,但可以通过添加aggfunc参数来实现,如 aggfunc={'年龄': 'sum'}
```
使用`pivot_table`的优点在于其灵活性和强大的数据处理能力,可以根据需求定制分析,同时提供清晰的结构,方便理解和操作。对于复杂的数据分析任务,数据透视表能够有效地将原始数据转化为更便于理解的报表形式。
- 1
- 2
- 3
前往页