pandas.数据透视表#

pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=True, sort=True, **kwargs)[源代码][源代码]#

创建一个类似于电子表格的透视表作为 DataFrame。

数据透视表中的级别将存储在 MultiIndex 对象(分层索引)中,位于结果 DataFrame 的索引和列上。

参数:
数据DataFrame

输入 pandas DataFrame 对象。

列表式或标量,可选

要聚合的列或列。

索引列, Grouper, 数组, 或前面内容的列表

用于在数据透视表索引上分组的键。如果传递的是一个列表,它可以包含任何其他类型(除了列表)。如果传递的是一个数组,它必须与数据长度相同,并将以与列值相同的方式使用。

列, Grouper, 数组, 或前面内容的列表

用于在数据透视表列上分组的键。如果传递的是一个列表,它可以包含任何其他类型(除了列表)。如果传递的是一个数组,它必须与数据长度相同,并将以与列值相同的方式使用。

aggfunc函数, 函数列表, 字典, 默认 “mean”

如果传递了一个函数列表,生成的数据透视表将具有分层列,其顶层是函数名称(从函数对象本身推断)。如果传递了一个字典,键是要聚合的列,值是函数或函数列表。如果 margins=True,aggfunc 将用于计算部分聚合。

fill_value标量,默认无

用于替换缺失值的值(在聚合后的数据透视表中)。

marginsbool, 默认为 False

如果 margins=True,将添加特殊的 All 列和行,这些列和行包含跨行和列类别部分的组聚合。

dropna布尔值, 默认为 True

不要包含所有条目都是 NaN 的列。如果为 True,在计算边际之前,将省略在任何列中具有 NaN 值的行。

margins_namestr, 默认 ‘All’

当 margins 为 True 时,包含总计的行/列的名称。

observedbool, 默认为 False

这只适用于任何分组器是分类的情况。如果为True:仅显示分类分组器的观测值。如果为False:显示分类分组器的所有值。

在 3.0.0 版本发生变更: 默认值现在是 True

排序布尔值, 默认为 True

指定结果是否应排序。

Added in version 1.3.0.

**kwargsdict

传递给 aggfunc 的可选关键字参数。

Added in version 3.0.0.

返回:
DataFrame

一个Excel风格的透视表。

参见

DataFrame.pivot

无需聚合的枢轴,可以处理非数字数据。

DataFrame.melt

将DataFrame从宽格式透视为长格式,可选择保留标识符集。

wide_to_long

宽面板转换为长格式。不如melt灵活,但比melt更用户友好。

备注

更多示例请参考 用户指南

例子

>>> df = pd.DataFrame(
...     {
...         "A": ["foo", "foo", "foo", "foo", "foo", "bar", "bar", "bar", "bar"],
...         "B": ["one", "one", "one", "two", "two", "one", "one", "two", "two"],
...         "C": [
...             "small",
...             "large",
...             "large",
...             "small",
...             "small",
...             "large",
...             "small",
...             "small",
...             "large",
...         ],
...         "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
...         "E": [2, 4, 5, 5, 6, 6, 8, 9, 9],
...     }
... )
>>> df
     A    B      C  D  E
0  foo  one  small  1  2
1  foo  one  large  2  4
2  foo  one  large  2  5
3  foo  two  small  3  5
4  foo  two  small  3  6
5  bar  one  large  4  6
6  bar  one  small  5  8
7  bar  two  small  6  9
8  bar  two  large  7  9

第一个示例通过求和来聚合值。

>>> table = pd.pivot_table(
...     df, values="D", index=["A", "B"], columns=["C"], aggfunc="sum"
... )
>>> table
C        large  small
A   B
bar one    4.0    5.0
    two    7.0    6.0
foo one    4.0    1.0
    two    NaN    6.0

我们也可以使用 fill_value 参数来填充缺失值。

>>> table = pd.pivot_table(
...     df, values="D", index=["A", "B"], columns=["C"], aggfunc="sum", fill_value=0
... )
>>> table
C        large  small
A   B
bar one      4      5
    two      7      6
foo one      4      1
    two      0      6

下一个示例通过取多列的平均值来进行聚合。

>>> table = pd.pivot_table(
...     df, values=["D", "E"], index=["A", "C"], aggfunc={"D": "mean", "E": "mean"}
... )
>>> table
                D         E
A   C
bar large  5.500000  7.500000
    small  5.500000  8.500000
foo large  2.000000  4.500000
    small  2.333333  4.333333

我们还可以为任何给定的值列计算多种类型的聚合。

>>> table = pd.pivot_table(
...     df,
...     values=["D", "E"],
...     index=["A", "C"],
...     aggfunc={"D": "mean", "E": ["min", "max", "mean"]},
... )
>>> table
                  D   E
               mean max      mean  min
A   C
bar large  5.500000   9  7.500000    6
    small  5.500000   9  8.500000    8
foo large  2.000000   5  4.500000    4
    small  2.333333   6  4.333333    2