查找高排名低价格最优商品的统计方法及Python实现方案
相关概念说明
你要找的「排名尽可能高、价格尽可能低」的最优商品对应多目标优化领域的经典概念:帕累托最优前沿(Pareto Frontier)。落在帕累托前沿上的商品满足:不存在任何其他商品同时比它排名更高、价格更低,完全匹配你要的「花最少钱拿最高可用排名」的需求。
你提到的分组筛选思路可以作为超大数据量下的前置降采样步骤,而价格排序索引和排名排序索引的对比思路本质和帕累托筛选逻辑同源,帕累托方法是更严谨的通用解法,不会遗漏最优解。
Python实现代码
10000条数据量级下直接用pandas处理即可,性能无压力:
import pandas as pd def pareto_frontier(df: pd.DataFrame, rank_col: str = 'rank', cost_col: str = 'cost') -> pd.DataFrame: # 先按排名升序(排名数值越小排名越高)、价格升序排序 df_sorted = df.sort_values(by=[rank_col, cost_col]).reset_index(drop=True) pareto_mask = [] min_cost = float('inf') # 遍历所有商品,保留价格比之前所有商品都低的项(排名已从高到低排序,价格更低即满足帕累托最优) for cost in df_sorted[cost_col]: if cost < min_cost: pareto_mask.append(True) min_cost = cost else: pareto_mask.append(False) return df_sorted[pareto_mask] # 测试用示例数据(对应你给出的样本) if __name__ == '__main__': sample_data = [ {'rank':1, 'cost':1000}, {'rank':2, 'cost':800}, {'rank':3, 'cost':900}, {'rank':4, 'cost':500}, {'rank':5, 'cost':400}, {'rank':6, 'cost':200}, ] df = pd.DataFrame(sample_data) res = pareto_frontier(df) print('最优性价比商品列表:') print(res)
示例输出结果
最优性价比商品列表: rank cost 0 1 1000 1 2 800 3 4 500 4 5 400 5 6 200
输出的结果就是所有满足要求的最优选项,你可以根据自己的预算和排名要求直接从中挑选即可。
内容的提问来源于stack exchange,提问作者Bewinxed
相关产品推荐
相关产品推荐

