熟练掌握 Pandas 透视表,数据统计汇总利器

2024-05-27 20:23:53 浏览数 (2)

有一堆杂乱的数据,你想按某些规则把它们分门别类、汇总统计?这时候就需要数据"整理达人" 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 入门到精通的道路上继续前行,而不是放弃!

0 人点赞