大家好,我是丁小杰。
对于数据透视表,相信对于 Excel 比较熟悉的小伙伴都知道如何使用它,并了解它的强大之处,而在pandas
中要实现数据透视就要用到pivot_table
了。
导入示例数据
首先导入演示的数据集。
import pandas as pd df = pd.read_csv('销售目标.csv') df.head()
参数说明
主要参数:
-
data
:待操作的 DataFrame -
values
:被聚合操作的列,可选项 -
index
:行分组键,作为结果 DataFrame 的行索引 -
columns
:列分组键,作为结果 DataFrame 的列索引 -
aggfunc
:聚合函数/函数列表,默认 numpy.mean 这里要注意如果 aggfunc 中存在函数列表,则返回的 DataFrame 中会显示函数名称 -
fill_value
:默认 None,可设定缺省值 -
dropna
:默认 True,如果列的所有值都是 NaN,将被删除;False 则保留 -
margins
:默认 False,设置为 True 可以添加行/列的总计 -
margins_name
:默认显示 'ALL',当margins = True
时,可以设定 margins 行/列的名称
常用操作
使用pivot_table
时必须要指定index
,因为计算时要根据index
进行聚合。
pd.pivot_table(df.head(20), index='订单日期', aggfunc=np.sum)
通过指定value
来选择被聚合的列。
pd.pivot_table(df.head(20), values='销售目标', index='订单日期', aggfunc=np.sum)
当只指定index
进行聚合时,其实用groupby
可以实现同样的效果。
df.head(20).groupby(['订单日期'])['销售目标'].sum().reset_index()
添加columns
参数,对列分组。
pd.pivot_table(df.head(10), values='销售目标', index=['订单日期', '类别'], columns='细分', aggfunc=np.sum)
对于上面结果中的空值,使用fill_value
参数统一填充为0
pd.pivot_table(df.head(10), values='销售目标', index=['订单日期', '类别'], columns=['细分'], aggfunc=np.sum, fill_value=0)
现在按年份来统计销售数据,注意此时的aggfunc
参数,当参数值包含列表时,在结果DataFrame
中就会显示函数名称。
pd.pivot_table(df, values='销售目标', index=['年份', '类别'], columns='细分', aggfunc=[np.sum])
如果需要添加合计列,只需指定margins=True
即可,同时根据需要指定合计名称。
pd.pivot_table(df, values='销售目标', index=['年份', '类别'], columns='细分', aggfunc=np.sum, margins=True, margins_name='合计')
当然与groupby
类似,对于计算函数我们可以同时指定多种方式。
pd.pivot_table(df, values='销售目标', index=['年份', '类别'], columns=['细分'], aggfunc={'销售目标': [max, np.sum]}, fill_value=0)
到此这篇关于Python Pandas实现数据透视表的文章就介绍到这了,更多相关Python 数据透视表内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!