pivot_table() 是 Pandas 中非常强大的数据透视表功能,可以轻松实现各种汇总统计。
基本语法:
pd.pivot_table(data,
values=None,
index=None,
columns=None,
aggfunc='mean',
fill_value=None,
margins=False)
实际示例:
import pandas as pd
# 创建示例数据
data = {
'Product': ['A', 'B', 'A', 'C', 'B', 'A', 'A', 'C'],
'Category': ['X', 'Y', 'X', 'Y', 'X', 'Y', 'X', 'X'],
'Salesperson': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Bob', 'Alice', 'Charlie'],
'Revenue': [100, 200, 150, 300, 250, None, 120, 400]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
1. 基本计数 - 统计每个产品的销售记录数
# 使用 pivot_table 计数
result1 = pd.pivot_table(df,
index='Product', # 按产品分组
values='Revenue', # 对Revenue列进行操作
aggfunc='count') # 计数函数
print("每个产品的销售记录数:")
print(result1)
2. 多维度汇总计数
# 按产品和类别进行二维汇总
result2 = pd.pivot_table(df,
index='Product',
columns='Category',
values='Revenue',
aggfunc='count',
fill_value=0) # 用0填充空值
print("\n产品×类别的销售记录数:")
print(result2)
3. 多种聚合函数同时使用
# 同时计算计数、求和、平均值
result3 = pd.pivot_table(df,
index='Product',
values='Revenue',
aggfunc={'Revenue': ['count', 'sum', 'mean']})
print("\n产品的多种统计指标:")
print(result3)
4. 添加总计行
# 添加总计行
result4 = pd.pivot_table(df,
index='Product',
values='Revenue',
aggfunc='count',
margins=True, # 添加总计
margins_name='总计')
print("\n带总计的计数:")
print(result4)
📊 对比 groupby() 和 pivot_table()
| 方法 | 适用场景 | 优点 |
|---|---|---|
groupby() | 简单分组统计 | 语法简洁,性能较好 |
pivot_table() | 复杂多维分析 | 功能强大,支持多维度,输出格式美观 |
🎯 实用技巧
自定义计数函数:
# 自定义聚合函数 - 计算非零值的数量
def non_zero_count(x):
return (x > 0).sum() if x.dtype.kind in 'biufc' else len(x)
result_custom = pd.pivot_table(df,
index='Product',
values='Revenue',
aggfunc=non_zero_count)
print("非零收入记录数:")
print(result_custom)
处理多层索引:
# 多层索引的汇总
result_multi = pd.pivot_table(df,
index=['Product', 'Category'],
values='Revenue',
aggfunc='count')
print("\n产品+类别的组合计数:")
print(result_multi)
💡 核心要点
values参数:指定要计算的那一列aggfunc参数:指定聚合函数,常用值:'count'- 非空值计数'size'- 总行数计数'sum','mean','min','max'- 其他统计函数
index参数:指定分组的列(相当于 SQL 的 GROUP BY)columns参数:创建列方向的维度(创建交叉表)
pivot_table() 确实是您描述的那个函数!它特别适合创建类似 Excel 数据透视表的多维汇总报表。如果您需要更具体的应用场景,请告诉我您的数据结构,我可以提供更针对性的示例。