pandas.pivot_table#

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

将电子表格样式的数据透视表创建为DataFrame。

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

参数
dataDataFrame
values要聚合的列,可选
index列、Grouper、数组或上一个

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

columns列、Grouper、数组或上一个

如果传递数组,则数组的长度必须与数据相同。该列表可以包含任何其他类型(列表除外)。透视表表列上分组依据的键。如果传递数组,则它的使用方式与列值相同。

aggfunc函数,函数列表,DICT,默认数字。均值

如果传递函数列表,则生成的数据透视表将具有顶层是函数名称(从函数对象本身推断)的分层列。如果传递dict,则键是要聚合的列,值是函数或函数列表。

fill_value标量,默认为无

要用来替换缺少的值的值(在聚合之后的结果透视表中)。

margins布尔值,默认为False

添加所有行/列(例如小计/总计)。

dropna布尔值,默认为True

不包括条目全部为NaN的列。

margins_name字符串,默认为‘All’

当边距为True时将包含总计的行/列的名称。

observed布尔值,默认为False

这只适用于任何一个石斑鱼是绝对的。如果为True:仅显示类别分组的观测值。如果为False:显示分类分组的所有值。

在 0.25.0 版更改.

sort布尔值,默认为True

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

1.3.0 新版功能.

退货
DataFrame

Excel样式的数据透视表。

参见

DataFrame.pivot

不带聚合的透视,可以处理非数字数据。

DataFrame.melt

将DataFrame从宽格式取消透视为长格式,可以选择保留设置的标识符。

wide_to_long

宽面板到长格式。比熔化更不灵活,但更方便用户使用。

注意事项

参考文献 the user guide 查看更多示例。

示例

>>> 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=np.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=np.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': np.mean,
...                              'E': np.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': np.mean,
...                              'E': [min, max, np.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