- Python Pandas 教程
- Python Pandas - 首页
- Python Pandas - 简介
- Python Pandas - 环境搭建
- Python Pandas - 基础
- Python Pandas - 数据结构介绍
- Python Pandas - 索引对象
- Python Pandas - 面板
- Python Pandas - 基本功能
- Python Pandas - 索引与数据选择
- Python Pandas - Series
- Python Pandas - Series
- Python Pandas - 切片 Series 对象
- Python Pandas - Series 对象的属性
- Python Pandas - Series 对象的算术运算
- Python Pandas - 将 Series 转换为其他对象
- Python Pandas - DataFrame
- Python Pandas - DataFrame
- Python Pandas - 访问 DataFrame
- Python Pandas - 切片 DataFrame 对象
- Python Pandas - 修改 DataFrame
- Python Pandas - 从 DataFrame 中删除行
- Python Pandas - DataFrame 的算术运算
- Python Pandas - I/O 工具
- Python Pandas - I/O 工具
- Python Pandas - 使用 CSV 格式
- Python Pandas - 读取和写入 JSON 文件
- Python Pandas - 从 Excel 文件读取数据
- Python Pandas - 将数据写入 Excel 文件
- Python Pandas - 处理 HTML 数据
- Python Pandas - 剪贴板
- Python Pandas - 使用 HDF5 格式
- Python Pandas - 与 SQL 的比较
- Python Pandas - 数据处理
- Python Pandas - 排序
- Python Pandas - 重索引
- Python Pandas - 迭代
- Python Pandas - 连接
- Python Pandas - 统计函数
- Python Pandas - 描述性统计
- Python Pandas - 处理文本数据
- Python Pandas - 函数应用
- Python Pandas - 选项和自定义
- Python Pandas - 窗口函数
- Python Pandas - 聚合
- Python Pandas - 合并/连接
- Python Pandas - 多级索引
- Python Pandas - 多级索引基础
- Python Pandas - 使用多级索引进行索引
- Python Pandas - 使用多级索引进行高级重索引
- Python Pandas - 重命名多级索引标签
- Python Pandas - 对多级索引进行排序
- Python Pandas - 二元运算
- Python Pandas - 二元比较运算
- Python Pandas - 布尔索引
- Python Pandas - 布尔掩码
- Python Pandas - 数据重塑与透视表
- Python Pandas - 透视表
- Python Pandas - 堆叠与解堆叠
- Python Pandas - 熔化
- Python Pandas - 计算虚拟变量
- Python Pandas - 分类数据
- Python Pandas - 分类数据
- Python Pandas - 分类数据的排序
- Python Pandas - 分类数据的比较
- Python Pandas - 处理缺失数据
- Python Pandas - 缺失数据
- Python Pandas - 填充缺失数据
- Python Pandas - 缺失值的插值
- Python Pandas - 删除缺失数据
- Python Pandas - 使用缺失数据进行计算
- Python Pandas - 处理重复数据
- Python Pandas - 重复数据
- Python Pandas - 计数和检索唯一元素
- Python Pandas - 重复标签
- Python Pandas - 分组与聚合
- Python Pandas - GroupBy
- Python Pandas - 时间序列数据
- Python Pandas - 日期功能
- Python Pandas - 时间增量
- Python Pandas - 稀疏数据结构
- Python Pandas - 稀疏数据
- Python Pandas - 可视化
- Python Pandas - 可视化
- Python Pandas - 其他概念
- Python Pandas - 注意事项与陷阱
- Python Pandas 有用资源
- Python Pandas - 快速指南
- Python Pandas - 有用资源
- Python Pandas - 讨论
Python Pandas - 透视表
在 Python Pandas 中,透视表是一种强大的数据转换技术,可以重塑数据,以便于分析和可视化。它将数据的表示形式从“长”格式更改为“宽”格式,从而简化了聚合和比较操作。此技术在处理时间序列数据或具有多个列的数据集时尤其有用。
Pandas 库提供了两种主要的透视表方法:pivot() 和 pivot_table()。在本教程中,我们将学习如何使用 pivot() 和 pivot_table() 方法有效地操作数据。
使用 pivot() 进行透视
Pandas 的 df.pivot() 方法用于在指定索引和列对具有唯一值时重塑数据。当您的数据结构良好且索引/列组合没有重复项时,此方法非常简单且实用。
示例
这是一个使用 Pandas 的 df.pivot() 方法演示 Pandas DataFrame 透视的基本示例。
import pandas as pd # Create a DataFrame df = pd.DataFrame({"Col1": range(12),"Col2": ["A", "A", "A", "B", "B","B", "C", "C", "C", "D", "D", "D"], "date": pd.to_datetime(["2024-01-03", "2024-01-04", "2024-01-05"] * 4)}) # Display the Input DataFrame print('Original DataFrame:\n', df) # Pivot the DataFrame pivoted = df.pivot(index="date", columns="Col2", values="Col1") # Display the output print('Pivoted DataFrame:\n', pivoted)
以下是上述代码的输出 -
Original DataFrame:
Col1 | Col2 | date | |
---|---|---|---|
0 | 0 | A | 2024-01-03 |
1 | 1 | A | 2024-01-04 |
2 | 2 | A | 2024-01-05 |
3 | 3 | B | 2024-01-03 |
4 | 4 | B | 2024-01-04 |
5 | 5 | B | 2024-01-05 |
6 | 6 | C | 2024-01-03 |
7 | 7 | C | 2024-01-04 |
8 | 8 | C | 2024-01-05 |
9 | 9 | D | 2024-01-03 |
10 | 10 | D | 2024-01-04 |
11 | 11 | D | 2024-01-05 |
Col2 | A | B | C | D |
---|---|---|---|---|
date | ||||
2024-01-03 | 0 | 3 | 6 | 9 |
2024-01-04 | 1 | 4 | 7 | 10 |
2024-01-05 | 2 | 5 | 8 | 11 |
注意:pivot() 方法要求指定的索引和列具有唯一值。如果您的数据包含重复项,则应改用 pivot_table() 方法。
使用 pivot_table() 进行透视
pivot() 方法是重塑数据的一种简单方法,而 pivot_table() 提供了聚合的灵活性,使其适用于更复杂的数据操作任务。这在处理重复项并需要数据聚合时尤其有用。
示例
此示例演示了如何使用 df.pivot_table() 方法对 DataFrame 进行透视。
import numpy as np import pandas as pd import datetime # Create a DataFrame df = pd.DataFrame({"A": [1, 1, 2, 3] * 6, "B": ["A", "B", "C"] * 8, "C": ["x", "x", "x", "y", "y", "y"] * 4, "D": np.random.randn(24), "E": np.random.randn(24), "F": [datetime.datetime(2013, i, 1) for i in range(1, 13)] +[datetime.datetime(2013, i, 15) for i in range(1, 13)]}) # Display the Input DataFrame print('Original DataFrame:\n', df) # Pivot the DataFrame pivot_table = pd.pivot_table(df, values="D", index=["A", "B"], columns=["C"]) # Display the output print('Pivoted DataFrame:\n', pivot_table)
以下是上述代码的输出 -
Original DataFrame:
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | 1 | A | x | -0.530395 | 2.819976 | 2013-01-01 |
1 | 1 | B | x | -0.593347 | 0.639877 | 2013-02-01 |
2 | 2 | C | x | 0.817982 | -0.270499 | 2013-03-01 |
3 | 3 | A | y | -1.438048 | 1.707790 | 2013-04-01 |
4 | 1 | B | y | 0.207012 | -0.387364 | 2013-05-01 |
5 | 1 | C | y | 0.462550 | 1.145260 | 2013-06-01 |
6 | 2 | A | x | 3.032849 | -0.027888 | 2013-07-01 |
7 | 3 | B | x | -0.972964 | -0.546819 | 2013-08-01 |
8 | 1 | C | x | 0.613289 | -0.041706 | 2013-09-01 |
9 | 1 | A | y | -1.072169 | -0.061843 | 2013-10-01 |
10 | 2 | B | y | 1.305400 | 0.463981 | 2013-11-01 |
11 | 3 | C | y | -1.265300 | -2.020158 | 2013-12-01 |
12 | 1 | A | x | 0.165842 | -0.154173 | 2013-01-15 |
13 | 1 | B | x | -1.038789 | -0.705948 | 2013-02-15 |
14 | 2 | C | x | 0.690639 | 0.843855 | 2013-03-15 |
15 | 3 | A | y | -0.592202 | 0.718281 | 2013-04-15 |
16 | 1 | B | y | 0.048085 | -1.111917 | 2013-05-15 |
17 | 1 | C | y | 1.111408 | -0.125214 | 2013-06-15 |
18 | 2 | A | x | 0.086012 | 0.276006 | 2013-07-15 |
19 | 3 | B | x | -1.043673 | -0.777043 | 2013-08-15 |
20 | 1 | C | x | -0.471818 | 0.736921 | 2013-09-15 |
21 | 1 | A | y | -0.138187 | -0.849134 | 2013-10-15 |
22 | 2 | B | y | -2.286761 | -2.859258 | 2013-11-15 |
23 | 3 | C | y | 0.392779 | -0.104737 | 2013-12-15 |
使用聚合进行透视
Pandas 的 pivot_table() 方法可以用来指定聚合函数。默认情况下,它计算平均值,但您也可以使用 sum、count 等函数,甚至可以使用自定义函数对透视进行聚合。
示例
此示例演示了如何使用 df.pivot_table() 方法对 DataFrame 进行透视并应用聚合函数。
import numpy as np import datetime import pandas as pd # Create a DataFrame df = pd.DataFrame({"A": [1, 1, 2, 3] * 6, "B": ["A", "B", "C"] * 8, "C": ["x", "x", "x", "y", "y", "y"] * 4, "D": np.random.randn(24), "E": np.random.randn(24), "F": [datetime.datetime(2013, i, 1) for i in range(1, 13)] +[datetime.datetime(2013, i, 15) for i in range(1, 13)]}) # Display the Input DataFrame print('Original DataFrame:\n', df) # Pivot the DataFrame with a aggregate function pivot_table = pd.pivot_table(df, values=["D", "E"], index=["B"], columns=["A", "C"], aggfunc="sum") # Display the output print('Pivoted DataFrame:\n', pivot_table)
以下是上述代码的输出 -
Original DataFrame:
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | 1 | A | x | 0.921728 | 0.807799 | 2013-01-01 |
1 | 1 | B | x | 0.565152 | -0.369947 | 2013-02-01 |
2 | 2 | C | x | 1.260114 | 0.352844 | 2013-03-01 |
3 | 3 | A | y | -1.369645 | 1.504198 | 2013-04-01 |
4 | 1 | B | y | 0.882293 | -1.177686 | 2013-05-01 |
5 | 1 | C | y | 0.560940 | 1.126121 | 2013-06-01 |
6 | 2 | A | x | 1.496309 | 0.131623 | 2013-07-01 |
7 | 3 | B | x | 0.557194 | 1.545635 | 2013-08-01 |
8 | 1 | C | x | 0.518436 | -0.581113 | 2013-09-01 |
9 | 1 | A | y | -0.607266 | -1.032699 | 2013-10-01 |
10 | 2 | B | y | -0.665019 | -0.628637 | 2013-11-01 |
11 | 3 | C | y | 2.146093 | -0.175748 | 2013-12-01 |
12 | 1 | A | x | 0.203505 | 1.402464 | 2013-01-15 |
13 | 1 | B | x | 0.602630 | 1.028011 | 2013-02-15 |
14 | 2 | C | x | -0.137840 | 0.099252 | 2013-03-15 |
15 | 3 | A | y | 1.517678 | 1.027651 | 2013-04-15 |
16 | 1 | B | y | -0.949576 | -0.268656 | 2013-05-15 |
17 | 1 | C | y | -0.328505 | -0.092841 | 2013-06-15 |
18 | 2 | A | x | 0.089315 | 0.771653 | 2013-07-15 |
19 | 3 | B | x | 1.889772 | -0.348258 | 2013-08-15 |
20 | 1 | C | x | 1.081143 | -0.006387 | 2013-09-15 |
21 | 1 | A | y | 0.223791 | 0.944354 | 2013-10-15 |
22 | 2 | B | y | 0.111047 | -1.634985 | 2013-11-15 |
23 | 3 | C | y | -1.475421 | 0.586825 | 2013-12-15 |
广告