Pandas 透视表进阶实现多维度聚合与自定义函数
透视表(Pivot Table)是数据分析的核心工具,进阶应用需掌握多维度聚合和自定义函数技巧。以下通过示例逐步演示:
1. 多维度聚合
在行/列方向叠加多个维度,实现立体分析:
import pandas as pd
import numpy as np
# 创建示例数据
data = {
'日期': pd.date_range('2023-01-01', periods=6),
'产品': ['A', 'B', 'A', 'C', 'B', 'C'],
'区域': ['东区', '西区', '东区', '西区', '东区', '西区'],
'销售额': [120, 150, 90, 200, 180, 170],
'成本': [80, 100, 60, 130, 110, 120]
}
df = pd.DataFrame(data)
# 多维度透视:行=日期+产品,列=区域,聚合销售额和利润
pivot = pd.pivot_table(
df,
index=['日期', '产品'], # 行方向双维度
columns='区域', # 列方向维度
values=['销售额', '成本'],
aggfunc={'销售额': [np.sum, np.mean], '成本': np.sum} # 多指标聚合
)
输出结构示例:
区域 东区 西区
销售额 成本 销售额 成本
sum mean sum sum mean sum
日期 产品
2023-01-01 A 120 120 80 - - -
2023-01-02 B 150 150 100 - - -
...
2. 自定义聚合函数
通过aggfunc实现个性化计算:
案例1:计算利润率
def profit_margin(series):
"""自定义利润率函数:(销售额-成本)/销售额"""
return (series['销售额'] - series['成本']).sum() / series['销售额'].sum()
# 应用自定义函数
result = pd.pivot_table(
df,
index='产品',
values=['销售额', '成本'],
aggfunc=profit_margin # 传入自定义函数
)
案例2:分位数分析
# 定义分位数聚合器
quantile_25 = lambda x: x.quantile(0.25)
quantile_75 = lambda x: x.quantile(0.75)
pivot_quantile = pd.pivot_table(
df,
index='区域',
values='销售额',
aggfunc=[np.mean, quantile_25, quantile_75] # 组合内置与自定义
)
3. 高级技巧
- 多层列名处理:
pivot.columns = ['_'.join(col) for col in pivot.columns] - 缺失值填充:添加参数
fill_value=0 - 边际汇总:添加参数
margins=True生成总计行 - 多函数应用:对同一字段应用多个聚合函数:
aggfunc={'销售额': [np.sum, np.std], '成本': [np.mean, max]}
数学表达式说明
在分析中常涉及统计指标,例如:
- 均值计算:$\mu = \frac{1}{n}\sum_{i=1}^{n} x_i$
- 利润率公式:$r = \frac{S - C}{S}$ ($S$为销售额,$C$为成本)
- 分位数定义:$Q_p$ 满足 $P(X \leq Q_p) = p$
注意事项:自定义函数需返回标量值;多维度透视时注意层次索引的切片操作(推荐使用
.xs()方法)。通过灵活组合这些功能,可构建复杂业务分析模型。
到此这篇关于Pandas 透视表进阶实现多维度聚合与自定义函数的文章就介绍到这了,更多相关Pandas 透视表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
jupyter notebook 参数传递给shell命令行实例
这篇文章主要介绍了jupyter notebook 参数传递给shell命令行实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-04-04
python-leetcode求区间[M,N]内的所有素数的个数实现方式
这篇文章主要介绍了python-leetcode求区间[M,N]内的所有素数的个数实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-08-08
Python tkinter进度条控件(Progressbar)的使用
这篇文章主要介绍了Python tkinter进度条控件(Progressbar)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-04-04


最新评论