pandas.DataFrame.pivot_table#

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

创建电子表格样式的透视表作为 DataFrame。

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

参数:
values列表类或标量,可选

要聚合的列。

index列、Grouper、数组或上述序列

用于对数据透视表索引进行分组的键。如果传递列表,则它可以包含其他类型(除列表外)。如果传递数组,它必须与数据长度相同,并将以与列值相同的方式使用。

columns列、Grouper、数组或上述序列

用于对数据透视表列进行分组的键。如果传递列表,则它可以包含其他类型(除列表外)。如果传递数组,它必须与数据长度相同,并将以与列值相同的方式使用。

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

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

fill_valuescalar, default None

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

marginsbool, default False

如果 margins=True,将添加特殊的 All 列和行,其中包含行和列上类别之间的部分分组聚合。

dropnabool,默认为 True

不包括条目全为 NaN 的列。如果为 True,

  • 在计算边距之前将省略任何列中具有 NA 值的行,

  • 将删除包含 NA 值的索引/列键(请参阅 DataFrame.groupby() 中的 dropna 参数)。

margins_namestr, default ‘All’

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

observed布尔值,默认为 False

这仅在任何分组器是Categoricals时适用。如果为True:仅显示分类分组器的已观察值。如果为False:显示分类分组器的所有值。

在版本 3.0.0 中更改:默认值现在是 `True`。

sortbool,默认为 True

指定是否应对结果进行排序。

**kwargsdict

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

返回:
DataFrame

Excel 风格的数据透视表。

另请参阅

DataFrame.pivot

不进行聚合的 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