
本文详解如何在 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() 机制,配合合理的数据重构策略,可优雅实现该需求。
✅ 核心步骤概览
-
明确分组键与目标列:从原始 DataFrame 中分离出分组列(
['id', 'hrz', 'tenor'])和待聚合的数值列(排除date等非数值/辅助列); - 定义自定义函数:确保函数接收一维 Series(或 ndarray),返回标量结果(如 KS 统计量);
-
分组聚合 + 多函数并行应用:使用
agg()同时调用多个函数,支持字典映射或函数列表; -
结果重塑为所需格式:通过
stack()或concat()将多层列索引展平,并插入test列标识函数名。
? 示例代码实现
首先,确保导入必要依赖并定义检验函数:
agg()
-
函数输入兼容性:
agg()会将每列的每个分组子集以pd.Series形式传入函数,务必确保函数能处理Series(如x.values可显式转为np.ndarray); -
缺失值处理:若某分组内某列全为空,
agg()默认返回NaN;可在函数内添加x = x.dropna()预处理; -
性能优化:对大数据集,避免在函数内重复调用
np.sort()——agg()是逐列独立调用,无法跨列复用中间结果; - 结果验证:建议对小样本手动验证一个分组的 KS/CVM 值,确认统计逻辑与业务预期一致(例如:均匀性越强,KS 值越小);
-
扩展性提示:如需添加更多检验(如
ad_test,jarque_bera),只需在agg()字典或列表中追加即可,结构完全一致。
通过上述任一方法,你均可高效获得结构化、可直接用于下游分析或可视化的检验结果表,真正实现“一次分组、多函数并行、结果即用”。











