如何用Python DataFrame筛选进球均值最高且场次最少的前10支球队
解决方案
要实现“进球均值最高且参赛场次最少的前10支球队”的筛选,核心是按优先级排序:先以进球均值降序排列,进球均值相同的情况下,再按参赛场次升序排列,最后取前10。之前的单一nlargest或合并DataFrame的方法逻辑不对,以下是两种可行方案:
方法一:用sort_values + head(直观易读)
先按指定规则排序,再截取前10行,适合大部分场景:
# 替换成你实际的参赛场序列名,比如'Partidos Jugados' sorted_df = mundialestotales_df.sort_values( by=['Prom. de Gol', 'Partidos Jugados'], ascending=[False, True] # 进球均值降序,参赛场次升序 ) top10_teams = sorted_df.head(10)
方法二:改进nlargest(大数据集更高效)
nlargest支持多列排序,但默认是降序,所以要对参赛场次列取反来实现升序逻辑:
top10_teams = mundialestotales_df.nlargest( 10, columns=['Prom. de Gol', lambda x: -x['Partidos Jugados']], keep='first' # 相同值时保留最先出现的球队 )
为什么合并DataFrame无效?
你之前尝试的合并方法逻辑有误:合并是取两个筛选结果的交集/并集,但你的需求是排序优先级——优先看进球均值,再看场次多少,不是单纯筛选“进球均值前10且场次最少的交集”,所以合并无法实现目标。
注意事项
- 请确认参赛场次的列名,替换代码中对应的字段(比如你的列可能叫
Partidos,需自行调整)。 - 如果存在多支球队进球均值和场次都完全相同的情况,
keep='first'会保留数据集中最先出现的球队,你也可以根据需求换成keep='last'或keep='all'(此时结果可能超过10行)。
内容的提问来源于stack exchange,提问作者DassDaffy_
相关产品推荐
相关产品推荐

