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

如何在Pandas中找出数值相同的多个最小值或最大值?

解决多球队黄牌数同值时的最值提取问题

这个问题我之前也碰到过!用直接计算最值+布尔筛选的方案是最简洁高效的,既能一次性找出所有数值相同的最值球队,又避免了nlargest的冗余操作,对大型数据集的处理速度也更快。

方案1:Pandas 数据集场景(最常用)

假设你的数据是一个包含Team(球队)和Yellow_Cards(黄牌数)列的DataFrame,步骤如下:

  1. 计算黄牌数的最小/最大值
  2. 用布尔索引筛选出所有等于该值的球队
import pandas as pd

# 示例数据集
data = {
    'Team': ['Denmark', 'Germany', 'France', 'Spain', 'Italy'],
    'Yellow_Cards': [4, 4, 2, 6, 2]
}
df = pd.DataFrame(data)

# 提取黄牌最少的球队
min_yellow = df['Yellow_Cards'].min()
min_teams = df[df['Yellow_Cards'] == min_yellow]['Team'].tolist()

# 提取黄牌最多的球队
max_yellow = df['Yellow_Cards'].max()
max_teams = df[df['Yellow_Cards'] == max_yellow]['Team'].tolist()

# 格式化输出结果
print(f"黄牌最少的球队({min_yellow}张):{', '.join(min_teams)}")
print(f"黄牌最多的球队({max_yellow}张):{', '.join(max_teams)}")

输出结果:

黄牌最少的球队(2张):France, Italy
黄牌最多的球队(6张):Spain

如果丹麦和德国都是4张黄牌(同为最值),只要修改示例数据里的对应数值,就能自动输出黄牌最多的球队(4张):Denmark, Germany。

为什么这个方案比nlargest好?

  • 效率更高:min()/max()只需要一次遍历数据集,布尔筛选也是O(n)时间复杂度,而nlargest需要排序(O(n log k)),大型数据集下性能差距会很明显
  • 无需预设数量:不用纠结nlargest里的k值设多少,不管有多少个球队同最值,都能一次性全部提取
  • 代码更简洁:核心逻辑只用4行就搞定,比nlargest还要额外处理重复值的写法清爽很多

方案2:普通列表/字典场景(无Pandas时)

如果你的数据是普通列表或字典,思路完全一致:先找最值,再筛选对应球队。

# 示例列表数据(球队,黄牌数)
teams_data = [('Denmark', 4), ('Germany', 4), ('France', 2), ('Spain', 6), ('Italy', 2)]

# 提取所有黄牌数,计算最值
yellow_counts = [count for team, count in teams_data]
min_yellow = min(yellow_counts)
max_yellow = max(yellow_counts)

# 筛选对应球队
min_teams = [team for team, count in teams_data if count == min_yellow]
max_teams = [team for team, count in teams_data if count == max_yellow]

# 输出结果
print(f"黄牌最少的球队:{min_teams}({min_yellow}张)")
print(f"黄牌最多的球队:{max_teams}({max_yellow}张)")

这个写法同样高效,不管数据量多大,都是线性遍历,不会有性能瓶颈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:55:23