You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按年月分组后提取Top N个最小值对应列的实现方法

核心思路:你已经得到了按月聚合的MAPE结果表errors,直接对该表逐行筛选最小的前N个列即可,不需要重复处理全量的res数据,实现代码如下:

# 自定义取前N个最小MAPE的列数
N = 3

# 对每个月的MAPE排序,取最小的前N个列名
top_n_cols = errors.apply(lambda x: x.nsmallest(N).index.tolist(), axis=1)
# 转换为结构化的DataFrame,方便后续合并
top_n_df = pd.DataFrame(top_n_cols.tolist(), 
                        index=top_n_cols.index, 
                        columns=[f'top{i+1}_col' for i in range(N)])

# 如果需要将结果合并到原有的全量res表中,执行如下代码即可
final_res = pd.merge_asof(res, 
                          top_n_df, 
                          left_index=True, 
                          right_index=True, 
                          direction='forward')

运行后top_n_df的示例输出(对应你给出的测试数据)如下:

top1_coltop2_coltop3_col
2013-02-28A_valuesE_valuesD_values
2013-03-31C_valuesE_valuesA_values
2013-04-30(按实际计算结果生成)
2013-05-31D_valuesE_valuesA_values

如果你还需要同时获取对应top列的MAPE数值,可以调整逻辑为:

top_n_with_val = errors.apply(lambda x: x.nsmallest(N).to_dict(), axis=1)

返回的每一行结果为字典格式,键是列名,值是对应的MAPE数值。

内容的提问来源于stack exchange,提问作者ah bon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:15:04