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