用法
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)
参数介绍
参数 | 介绍 |
---|---|
data | 传入的数据,以dataframe形式 |
values | 需要聚合的列名,单个列名或者列表形式 |
index | 索引,一个或多个索引 |
columns | 列名称 |
aggfunc | 聚合函数,默认为numpy.mean,如果传入的是字典类似agg{‘key’: ‘value’},键为要聚合的列,值为聚合的函数 |
fill_value | 需要填充的值 |
dropna | 删空值 |
margin | 边(这个会在下面使用图来表示) |
margins_name | 聚合边的名字 |
案例
import numpy as np
import pandas as pd
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
# 聚合D列,以A,B作为index,以C列的值进行分组,聚合函数为sum
table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
table
可以看到聚合后会有NaN的值,可以使用fillna进行填充
table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum, fill_value=0)
table
对不同的列进行不同的聚合
# 对D列聚合相加,E列平均数
table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],aggfunc={'D': np.sum,
'E': np.mean})
table
也可以对某一列,进行多个函数处置
# 对D列取平均数,E列取最小值,最大值,平均数
table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],aggfunc={'D': np.mean,
'E': [min, max, np.mean]})
table
接下来讲下margins这个参数
聚合之后,如上图,也可以进行求总数
table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],aggfunc=sum,margins=True)
table
可以对margins更换名字
使用参数margins_name=
table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],aggfunc=sum,margins=True,margins='Total')
table
columns
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]})
table = pd.pivot_table(df, columns='C',index=['A', 'B'],aggfunc={'D': np.sum},margins=True,margins_name='Total')
table