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

Pandas如何按规则提取各位置TopN球员(含FLEX灵活位筛选需求)

Pandas 高效实现阵容配额选拔方案

核心逻辑分两步完成,全程使用pandas向量化操作,无手动遍历性能损耗,可支撑十万级以上数据秒级运算:

  • 第一步:完成除FLEX外所有固定位置的配额选拔,标记已选中球员
  • 第二步:从RB/WR/TE三类位置的未选中球员中,按得分取前N名作为FLEX配额人选

完整实现代码

import pandas as pd

# 1. 构造原始测试数据
raw_data = {
    'Player': {8: 'Darrel Williams',  2: 'Mark Ingram',  3: 'Michael Carter',  4: 'Najee Harris',  10: 'James Conner',  0: 'Buffalo Bills',  15: 'Davante Adams',  1: 'Aaron Rodgers',  5: 'Tyler Bass',  11: 'Corey Davis',  6: 'Van Jefferson',  14: 'Matt Ryan',  7: 'T.J. Hockenson',  9: 'Antonio Brown',  12: 'Alvin Kamara',  13: 'Tyler Boyd'},
    'Position': {8: 'RB',  2: 'RB',  3: 'RB',  4: 'RB',  10: 'RB',  0: 'DEF',  15: 'WR',  1: 'QB',  5: 'K',  11: 'WR',  6: 'WR',  14: 'QB',  7: 'TE',  9: 'WR',  12: 'RB',  13: 'WR'},
    'Score': {8: 24.9,  2: 18.8,  3: 16.2,  4: 15.3,  10: 13.9,  0: 12.0,  15: 11.3,  1: 10.48,  5: 9.0,  11: 8.8,  6: 6.9,  14: 1.68,  7: 0.0,  9: 0.0,  12: 0.0,  13: 0.0}
}
df = pd.DataFrame(raw_data).reset_index(drop=True)

# 2. 定义配额规则
requirements_dictionary = {'QB': 1, 'RB': 2, 'WR': 2, 'TE': 1, 'K': 1, 'DEF': 1, 'FLEX': 2}
base_quota = {k:v for k,v in requirements_dictionary.items() if k != 'FLEX'}
flex_count = requirements_dictionary['FLEX']
flex_allowed_pos = {'RB', 'WR', 'TE'}

# 3. 固定位置配额选拔
# 给每个位置的球员按得分降序排名
df['pos_score_rank'] = df.groupby('Position')['Score'].rank(ascending=False, method='first')
# 筛选每个位置符合配额要求的球员
base_selected = df[df.apply(lambda row: row['pos_score_rank'] <= base_quota.get(row['Position'], 0), axis=1)].copy()
# 标记分配位置为原始位置
base_selected['alloc_position'] = base_selected['Position']

# 4. FLEX位置选拔
# 筛选未被固定位置选中、且符合FLEX参选资格的球员
unselected_df = df[~df.index.isin(base_selected.index)]
flex_selected = unselected_df[unselected_df['Position'].isin(flex_allowed_pos)]\
    .sort_values('Score', ascending=False)\
    .head(flex_count)\
    .copy()
# 标记分配位置为FLEX
flex_selected['alloc_position'] = 'FLEX'

# 5. 合并最终结果
final_result = pd.concat([base_selected, flex_selected], ignore_index=True)[['Player', 'Position', 'Score', 'alloc_position']]
print(final_result.sort_values('alloc_position'))

运行结果示例

PlayerPositionScorealloc_position
Buffalo BillsDEF12.00DEF
Michael CarterRB16.20FLEX
Najee HarrisRB15.30FLEX
Tyler BassK9.00K
Aaron RodgersQB10.48QB
Darrel WilliamsRB24.90RB
Mark IngramRB18.80RB
T.J. HockensonTE0.00TE
Davante AdamsWR11.30WR
Corey DavisWR8.80WR

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:03