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

Pandas实现按最低得分者排序分组球队及生成摘要需求

没问题!我帮你梳理下实现思路,并用两种常用方式来实现——原生Python(无依赖)和Pandas(适合大数据场景),你可以根据自己的需求选择:

首先明确核心逻辑:

  1. 分组绑定:同队球员必须始终在一起
  2. 整体排序依据:按各队的最低得分从小到大排列球队顺序
  3. 队内排序:同队球员可按得分从低到高排列(可选,也可保留原顺序)
  4. 摘要生成:提取每个队的最低得分球员,顺序与排序后的球队一致

方案一:原生Python实现(无第三方库依赖)

适合小数据集,不需要额外安装库:

from itertools import groupby

# 示例数据集
players = [
    {"name": "张三", "team": "火箭队", "score": 85},
    {"name": "李四", "team": "湖人队", "score": 72},
    {"name": "王五", "team": "火箭队", "score": 68},
    {"name": "赵六", "team": "湖人队", "score": 78},
    {"name": "孙七", "team": "勇士队", "score": 65},
    {"name": "周八", "team": "勇士队", "score": 70},
]

# 步骤1:按球队分组(groupby要求先按分组键排序)
players_by_team = sorted(players, key=lambda x: x["team"])
team_groups = groupby(players_by_team, key=lambda x: x["team"])

# 步骤2:收集每个球队的核心信息
team_details = []
for team_name, group in team_groups:
    player_list = list(group)
    team_min_score = min(p["score"] for p in player_list)
    # 队内按得分升序排序(不需要的话直接用player_list即可)
    sorted_players = sorted(player_list, key=lambda x: x["score"])
    team_details.append({
        "team": team_name,
        "min_score": team_min_score,
        "players": sorted_players
    })

# 步骤3:按各队最低分对球队排序
sorted_teams = sorted(team_details, key=lambda x: x["min_score"])

# 步骤4:拼接最终的球员排序结果
final_sorted_players = []
for team in sorted_teams:
    final_sorted_players.extend(team["players"])

# 步骤5:生成各队最低分球员摘要
min_score_players_summary = [
    next(p for p in team["players"] if p["score"] == team["min_score"])
    for team in sorted_teams
]

# 打印结果
print("✅ 排序后的球员列表:")
for p in final_sorted_players:
    print(f"{p['name']} | {p['team']} | 得分:{p['score']}")

print("\n📌 各队最低分球员摘要:")
for p in min_score_players_summary:
    print(f"{p['name']} | {p['team']} | 最低得分:{p['score']}")

方案二:Pandas实现(适合大数据集)

如果你的数据集较大,用Pandas会更高效简洁:

import pandas as pd

# 示例数据集
players = [
    {"name": "张三", "team": "火箭队", "score": 85},
    {"name": "李四", "team": "湖人队", "score": 72},
    {"name": "王五", "team": "火箭队", "score": 68},
    {"name": "赵六", "team": "湖人队", "score": 78},
    {"name": "孙七", "team": "勇士队", "score": 65},
    {"name": "周八", "team": "勇士队", "score": 70},
]

# 转换为DataFrame格式
df = pd.DataFrame(players)

# 为每行添加所属球队的最低分(方便排序)
df["team_min_score"] = df.groupby("team")["score"].transform("min")

# 排序逻辑:先按球队最低分升序,再按球队(保证同队绑定),最后按球员得分升序
final_sorted_df = df.sort_values(by=["team_min_score", "team", "score"])

# 生成摘要:去重保留每个队的第一个(即最低分球员)
summary_df = final_sorted_df.drop_duplicates(subset=["team"], keep="first")

# 输出结果
print("✅ 排序后的球员列表:")
print(final_sorted_df[["name", "team", "score"]].to_string(index=False))

print("\n📌 各队最低分球员摘要:")
print(summary_df[["name", "team", "score"]].to_string(index=False))

关键说明

  • 如果不需要队内按得分排序,直接去掉代码中对队内球员排序的部分即可
  • 如果一个队有多个球员同分最低分,两种方案默认都会取第一个遇到的球员,你可以根据需求调整逻辑(比如保留所有最低分球员)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:36:49