pandas.DataFrame.pivot_table 是 Pandas 中用于数据透视表(pivot table)的函数,可以通过对数据进行聚合、重塑和分组来创建一个新的 DataFrame。通过 pivot_table 方法,可以对数据进行汇总、统计和重组,类似于 Excel 中的透视表功能。本文主要介绍一下Pandas中pandas.DataFrame.pivot_table方法的使用。

DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False) → 'DataFrame'     [source]

创建电子表格样式的pivot table作为DataFrame

pivot table中的级别将存储在结果DataFrame的索引和列上的MultiIndex对象(分层索引)中。

参数

values :要汇总的列,可选

index : column,Grouper,array或上一个list

如果传递数组,则其长度必须与数据长度相同。

该列表可以包含任何其他类型(列表除外)。

在pivot table索引上进行分组的键。

如果传递了数组,则其使用方式与列值相同。

columns :  column,Grouper,array或上一个list

如果传递数组,则其长度必须与数据长度相同。

该列表可以包含任何其他类型(列表除外)。

在pivot table列上进行分组的键。如果传递了数组,

则其使用方式与列值相同。

aggfunc :函数,函数列表,字典,默认numpy.mean

如果传递了函数列表,

则生成的pivot table将具有层次结构列,

其顶层是函数名称(从函数对象本身推论得出)。

如果传递了dict,则键为要汇总的列,

值是函数或函数列表。

fill_valuescalar(标量),默认为None

用于替换缺失值的值。

marginsbool,默认为False

添加所有行/列(例如,小计/总计)。

dropnabool,默认为True

不要包括所有条目均为NaN的列。

margins_name str,默认为"All"

marginsTrue时将包含总计的行/列的名称。

observed bool,默认为False

仅当任何 groupers是分类者时才适用。

如果为True:仅显示分类 groupers 的观测值。

如果为False:显示分类 groupers 的所有值。

在版本0.25.0中进行了更改。

返回值

DataFrame

Excel样式的pivot table.

例子,

1)按店铺和产品聚合销售额

import pandas as pd

# 创建数据
data = {
    '店铺': ['店铺A', '店铺A', '店铺B', '店铺B',
    '店铺A', '店铺B'],
    '产品': ['产品1', '产品2', '产品1', '产品2',
    '产品1', '产品2'],
    '销售额': [100, 150, 200, 250, 120, 300]
}

df = pd.DataFrame(data)

# 使用 pivot_table 创建透视表
pivot = df.pivot_table(values='销售额', 
index='店铺', columns='产品', aggfunc='sum',
fill_value=0)

print(pivot)

2)按店铺和产品聚合销售额,并计算平均值

import pandas as pd

# 创建数据
data = {
    '店铺': ['店铺A', '店铺A', '店铺B', '店铺B',
    '店铺A', '店铺B'],
    '产品': ['产品1', '产品2', '产品1', '产品2',
    '产品1', '产品2'],
    '销售额': [100, 150, 200, 250, 120, 300]
}

df = pd.DataFrame(data)

pivot = df.pivot_table(values='销售额', index='店铺',
columns='产品', aggfunc='mean', fill_value=0)

print(pivot)

3)添加汇总行和列(margins)

import pandas as pd

# 创建数据
data = {
    '店铺': ['店铺A', '店铺A', '店铺B', '店铺B',
    '店铺A', '店铺B'],
    '产品': ['产品1', '产品2', '产品1', '产品2',
    '产品1', '产品2'],
    '销售额': [100, 150, 200, 250, 120, 300]
}

df = pd.DataFrame(data)

pivot_with_margins = df.pivot_table(values='销售额',
index='店铺', columns='产品', aggfunc='sum',
margins=True)

print(pivot_with_margins)

推荐文档

相关文档

大家感兴趣的内容

随机列表