有一堆杂乱的数据,你想按某些规则把它们分门别类、汇总统计?这时候就需要数据"整理达人" Pandas.pivot_table 出马了,这是 Pandas 快速上手系列的第 8 篇。
pivot_table 可以把一个大数据表中的数据,按你指定的"分类键"进行重新排列。比如你有一份销售记录,可以让 pivot_table 按"商品"和"地区"两个键将数据重新排列成一个漂亮的交叉表。
这个表里的每个格子,都会显示对应"地区 产品"的销售数据汇总。你还可以指定用"总和"、"均值"等聚合函数来汇总每个格子的数据。
拥有了这张透视表,数据就井然有序了。你可以一览无余地观察每个类别、每个地区的销售情况,发现潜在规律和异常。无论是数据分析、报表制作,还是其他数据处理场景, pivot_table 都是你的得力助手。
对于繁琐的数据整理和统计工作, pivot_table 就像个"数据武术家",它能让你的数据重现清晰有序的"功夫阵"。下面来看它的具体用法吧!
语法和对应的参数含义:
代码语言:javascript复制import pandas
df = pandas.pivot_table(
data="要进行汇总的数据集(DataFrame)",
values="要聚合的列或列的列表",
index="要作为行索引的列或列的列表",
columns="要作为列索引的列或列的列表",
aggfunc="用于聚合数据的函数或函数列表,默认是 numpy.mean",
fill_value="填充缺失值的标量值",
margins="布尔值,是否添加行和列的总计,默认是 False",
margins_name="总计行和列的名称,默认是 All",
dropna="布尔值,是否删除所有结果为全 NaN 的列,默认是 True",
observed="布尔值,对于分类列,是否只显示实际出现的类别,默认是 False",
sort="布尔值,是否对结果进行排序,默认是 True"
)
代码示例:
代码语言:javascript复制import pandas as pd
# 生成一个数据集 df
data = {
'Region': ['North', 'South', 'East', 'West', 'North', 'South', 'East', 'West'],
'Product': ['A', 'A', 'B', 'B', 'C', 'C', 'A', 'A'],
'Sales': [100, 150, 200, 130, 120, 180, 220, 210],
'Quantity': [10, 15, 20, 13, 12, 18, 22, 21]
}
df = pd.DataFrame(data)
数据集 df 内容
代码语言:javascript复制In [53]: df
Out[53]:
Region Product Sales Quantity
0 North A 100 10
1 South A 150 15
2 East B 200 20
3 West B 130 13
4 North C 120 12
5 South C 180 18
6 East A 220 22
7 West A 210 21
可以看到上面的数据集描述的是每个地区(Region)卖出的产品(Product),以及当前产品的销售额(Sales),客户质量(Quantity),现在希望对每个地区售卖的产品和销售额做一个统计汇总透视表。例如: 想知道在 West 地区 A 产品的销售额是多少。
透视表代码实现如下:
代码语言:javascript复制# 对 Sales 进行求和操作,行索引是Region,列索引是各个 Product,
# 对行和列增加统计 total
In [56]: pd.pivot_table(df, values='Sales', index='Region',
columns='Product', aggfunc='sum', margins=True,
margins_name='Total')
Out[56]:
Product A B C Total
Region
East 220.0 200.0 NaN 420
North 100.0 NaN 120.0 220
South 150.0 NaN 180.0 330
West 210.0 130.0 NaN 340
Total 680.0 330.0 300.0 1310
pivot_table 还支持多个行索引和列,例如行索引是 Region 和 Product ,更改 index 参数即可,代码是实现如下:
代码语言:javascript复制In [57]: pd.pivot_table(df, values='Sales',
index=['Region', 'Product'], aggfunc='sum')
Out[57]:
Sales
Region Product
East A 220
B 200
North A 100
C 120
South A 150
C 180
West A 210
B 130
Pandas 快速上手系列算上本文是更新了 8 篇,其他文章如下:
Python 中的 pandas 快速上手之:概念初识
pandas 快速上手系列:自定义 dataframe
读 DataFrame 不只是读 DataFrame ,还能读出这么多信息
熟练掌握 Pandas 合并术,数据处理不再伤脑筋
玩转 Pandas unique方法,告别数据重复烦恼
谜一样的空值? pandas.fillna 妙招拨云见日
熟练掌握 Pandas 离散差分,数据变化一目了然
学完本系列你可以掌握下面这些能力:
灵活创建和管理数据集,通过自定义创建 DataFrame ,可以方便地将各种格式的数据转化为 Pandas 的数据格式,为后续分析做好准备。
高效数据清洗与预处理,利用fillna、unique等函数,能够快速处理缺失值、去重等数据清洗工作,为模型输入做好数据预处理。
数据融合整合,Pandas 合并方法让您能够方便地横向或纵向合并多个数据源,打通数据壁垒,整合更多维度的信息。
发现数据潜在规律与异常,离散差分等分析手段,可以帮助您观测时间序列等数据的变化趋势,发现潜在规律和异常情况。
多维度数据透视与总结,透视表功能可以按任意的行列索引对数据进行高效切割与聚合,全方位统计各维度的关键信息。
总之,掌握了这些 Pandas 基础和方法后,可以帮你在数据分析、挖掘、决策等各个环节发挥重要作用,助力业务持续优化和创新。本系列属于抛砖引玉,有了这些基础,希望可以在 Pandas 入门到精通的道路上继续前行,而不是放弃!