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

Python:基于多条件修改DataFrame中FieldPosition列值

解决DataFrame填充FieldPosition的实现方案

核心规则梳理

  • 单团队配额:1个Front、2个Back、1个Middle
  • 固定映射关系:Striker→Front,Defender→Back,Midfielder→Middle
  • 处理目标:为Position列值为Fill且FieldPosition为None的行,按团队配额缺口补充对应值

具体实现代码(函数+循环+条件逻辑)

import pandas as pd

def fill_field_position(df):
    # 定义团队配额和固定映射
    team_quota = {'Front': 1, 'Back': 2, 'Middle': 1}
    pos_mapping = {'Striker': 'Front', 'Defender': 'Back', 'Midfielder': 'Middle'}
    
    # 先处理非Fill的行,确保映射正确
    df.loc[df['Position'] != 'Fill', 'FieldPosition'] = df.loc[df['Position'] != 'Fill', 'Position'].map(pos_mapping)
    
    # 遍历每个团队
    for team in df['Team'].unique():
        # 统计当前团队已有的各FieldPosition数量
        current_counts = df[df['Team'] == team]['FieldPosition'].value_counts().to_dict()
        # 计算每个FieldPosition的缺口
        gaps = {fp: quota - current_counts.get(fp, 0) for fp, quota in team_quota.items()}
        
        # 获取当前团队需要填充的行索引
        fill_rows_idx = df[(df['Team'] == team) & (df['Position'] == 'Fill') & (df['FieldPosition'].isna())].index
        
        # 按缺口依次填充对应FieldPosition
        fill_idx = 0
        for fp, gap in gaps.items():
            if gap <= 0:
                continue
            df.loc[fill_rows_idx[fill_idx:fill_idx+gap], 'FieldPosition'] = fp
            fill_idx += gap
    
    return df

# 示例使用
sample_data = {
    'Team': ['TeamA', 'TeamA', 'TeamA', 'TeamA', 'TeamA', 'TeamB', 'TeamB', 'TeamB', 'TeamB', 'TeamB'],
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Henry', 'Ivy', 'Jack'],
    'Position': ['Striker', 'Defender', 'Fill', 'Fill', 'Fill', 'Midfielder', 'Fill', 'Fill', 'Fill', 'Defender'],
    'FieldPosition': [None, None, None, None, None, None, None, None, None, None]
}
df = pd.DataFrame(sample_data)
filled_df = fill_field_position(df)
print(filled_df)

代码逻辑说明

  1. 预映射非Fill行:先把Position不是Fill的行按固定关系填充FieldPosition,保证配额统计的基数准确。
  2. 团队独立处理:遍历每个团队,避免跨团队的配额干扰,适配20+团队的场景。
  3. 缺口计算:对比当前团队各FieldPosition的实际数量与配额,算出需要补充的数量。
  4. 批量填充:针对每个团队的Fill行,按缺口数量依次分配对应的FieldPosition,直到填满配额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:02:03