[python]Dataframe对象的pivot_table()函数

76 阅读2分钟

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 数据透视表的多维汇总报表。如果您需要更具体的应用场景,请告诉我您的数据结构,我可以提供更针对性的示例。