
本文详解如何在 pandas 中对指定列(如 id、hrz、tenor)进行分组,并同时对多个数值列(如 1–4)批量应用多个自定义统计函数(如 ks 检验、cvm 检验),最终生成结构清晰、可直接分析的宽格式结果表。
本文详解如何在 pandas 中对指定列(如 id、hrz、tenor)进行分组,并同时对多个数值列(如 1–4)批量应用多个自定义统计函数(如 ks 检验、cvm 检验),最终生成结构清晰、可直接分析的宽格式结果表。
在金融、风控或统计建模场景中,常需对时间序列数据按资产标识(id)、期限类型(tenor)和参数维度(hrz)分组,并对各列指标独立执行分布检验(如 Kolmogorov-Smirnov 或 Cramér–von Mises)。pandas 提供了灵活高效的 groupby().agg() 接口,配合多级索引与堆叠操作,可优雅实现「多分组键 × 多目标列 × 多自定义函数」的组合聚合。
以下为完整实现流程(假设已导入必要库):
pd.concat
- 自定义函数必须接受
Series或ndarray输入,并返回标量(如float);若返回pd.Series,结果将被展开为多列,需谨慎处理; -
kstest在样本量过小时可能不稳定,建议添加if len(x) 等健壮性检查; - 若原始数据含缺失值,
groupby().agg()默认跳过NaN,但ks_test/cvm_test需确保输入无NaN,推荐前置df[value_cols] = df[value_cols].dropna()或在函数内过滤; - 输出顺序默认按分组键字典序排列,如需保持原始时间顺序,请先对
df按date排序再分组。
两种方案均生成结构一致、列名规范的结果,可直接用于后续可视化(如 sns.catplot(..., hue='test'))或导出分析报告。掌握此模式后,可轻松扩展至任意数量的分组维度、数值列与统计函数组合。











