Pandas如何按分组筛选平均time值最低的algo对应记录
问题说明
现有如下结构的DataFrame:
import pandas as pd df = pd.DataFrame([ (2, 2, 'A', .5), (2, 2, 'A', .6), (2, 2, 'B', .75), (2, 2, 'B', .7), (2, 2, 'C', .6), (2, 3, 'A', .65), (2, 3, 'A', .6), (2, 3, 'B', .75), (2, 3, 'B', .7), (2, 3, 'C', .6) ], columns=['out_size', 'problem_size', 'algo', 'time'])
需要实现的逻辑:
- 按
out_size、problem_size划分数据组,每组内计算不同algo对应的time平均值 - 每组仅保留平均
time最低的algo对应的聚合结果
预期输出为:
pd.DataFrame( [[2, 2, 'A', 0.55], [2, 3, 'C', 0.6]], columns=['out_size', 'problem_size', 'algo', 'time'])
实现代码
直接通过两次分组计算即可得到结果,无额外依赖:
# 先聚合计算每个维度+算法组合的平均耗时 mean_df = df.groupby(['out_size', 'problem_size', 'algo'], as_index=False)['time'].mean() # 每个维度组筛选平均耗时最小的算法记录 res = mean_df.loc[mean_df.groupby(['out_size', 'problem_size'])['time'].idxmin()].reset_index(drop=True)
执行后res的输出和预期完全一致:
out_size problem_size algo time 0 2 2 A 0.55 1 2 3 C 0.60
如果需要保留原始的明细行而非聚合后的平均值,可以先拿到每个(out_size, problem_size)对应的最优algo映射,再和原表做等值匹配筛选即可。
内容的提问来源于stack exchange,提问作者Eduardo Reis
相关产品推荐
相关产品推荐

