如何用Pandas的groupby与agg自定义生成rabbit计算列?
按ITEM分组计算多列的中位数、标准差及自定义指标rabbit
需求说明
按ITEM字段分组后,为col1、col2、col3三列分别计算以下三个指标:
- 中位数(median)
- 标准差(std)
- rabbit:对应列的均值 + 4倍标准差
实现代码
import pandas as pd # 原始数据 data = {'ITEM': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'z', 'z', 'z', 'z'], 'col1': [37, 84, 54, 72, 49, 20, 64, 75, 90, 71, 84, 46, 78, 24, 34], 'col2': [27, 44, 43, 12, 92, 10, 24, 55, 50, 37, 44, 57, 38, 64, 17], 'col3': [17, 54, 64, 68, 39, 50, 34, 65, 40, 72, 44, 56, 48, 94, 37], } df = pd.DataFrame(data) # 定义rabbit指标的计算函数 def rabbit_calc(x): return x.mean() + 4 * x.std() # 分组聚合计算所有指标 result = df.groupby('ITEM').agg({ 'col1': ['median', 'std', rabbit_calc], 'col2': ['median', 'std', rabbit_calc], 'col3': ['median', 'std', rabbit_calc] }) # 重命名多级列名,提升可读性 result.columns = ['_'.join(col) for col in result.columns] print(result)
代码说明
- 先将原始字典数据转换为pandas的DataFrame,这是数据处理的基础操作
- 自定义
rabbit_calc函数,接收分组后的单列数据,按需求计算均值加4倍标准差 - 使用
groupby('ITEM').agg()实现分组聚合,每个列对应传入三个计算方法(内置的median、std,以及自定义函数) - 最后将默认的多级列名重命名为
列名_指标名的格式,方便查看结果
示例输出(部分)
col1_median col1_std col1_rabbit_calc col2_median col2_std col2_rabbit_calc col3_median col3_std col3_rabbit_calc ITEM a 54.0 18.547237 129.088948 43.0 30.724583 200.898331 54.0 20.736442 136.945768 b 64.0 27.531800 149.127201 24.0 22.781572 115.126288 50.0 15.968720 113.874881
内容的提问来源于stack exchange,提问作者888Seeme
相关产品推荐
相关产品推荐

