Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.pivot_table方法的使用。

DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False) → 'DataFrame'     [source]

创建电子表格样式的pivot table作为DataFrame

pivot table中的级别将存储在结果DataFrame的索引和列上的MultiIndex对象(分层索引)中。

参数

values :要汇总的列,可选

index : column,Grouper,array或上一个list

如果传递数组,则其长度必须与数据长度相同。

该列表可以包含任何其他类型(列表除外)。

在pivot table索引上进行分组的键。

如果传递了数组,则其使用方式与列值相同。

columns :  column,Grouper,array或上一个list

如果传递数组,则其长度必须与数据长度相同。

该列表可以包含任何其他类型(列表除外)。

在pivot table列上进行分组的键。如果传递了数组,

则其使用方式与列值相同。

aggfunc :函数,函数列表,字典,默认numpy.mean

如果传递了函数列表,

则生成的pivot table将具有层次结构列,

其顶层是函数名称(从函数对象本身推论得出)。

如果传递了dict,则键为要汇总的列,

值是函数或函数列表。

fill_valuescalar(标量),默认为None

用于替换缺失值的值。

marginsbool,默认为False

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

dropnabool,默认为True

不要包括所有条目均为NaN的列。

margins_name str,默认为"All"

marginsTrue时将包含总计的行/列的名称。

observed bool,默认为False

仅当任何 groupers是分类者时才适用。

如果为True:仅显示分类 groupers 的观测值。

如果为False:显示分类 groupers 的所有值。

在版本0.25.0中进行了更改。

返回值

DataFrame

Excel样式的pivot table.

例子,

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.0  7.500000  6.0
    small  5.500000  9.0  8.500000  8.0
foo large  2.000000  5.0  4.500000  4.0
    small  2.333333  6.0  4.333333  2.0