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