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