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

基于For循环按position_new字段拆分足球球员统计DataFrame的技术咨询

按位置分组DataFrame的循环实现方案

我来帮你搞定这个按位置分组的循环实现问题!你的思路是对的,不过原来的代码在循环逻辑和条件判断上有点小问题,下面给你修正后的方案:

正确的实现思路

我们可以先定义一个分组规则字典,把每个目标变量对应的位置列表存起来,然后循环这个字典来自动完成筛选和变量赋值。这样既简洁又容易维护,以后要修改分组规则直接改字典就行。

代码实现

方式1:直接创建目标变量(适合快速使用)

# 定义分组规则:键是变量名,值是对应的position_new取值列表
position_groups = {
    'att': ['FW', 'LW', 'RW'],
    'mid': ['AM', 'CM', 'DM', 'LM', 'RM'],
    'defender': ['CB', 'DF', 'GK', 'LB', 'MF', 'RB', 'WB']
}

# 循环分组规则,自动生成对应的变量
for var_name, positions in position_groups.items():
    # 筛选position_new在指定列表中的行,并赋值给对应的变量
    globals()[var_name] = df[df['position_new'].isin(positions)].copy()

方式2:用字典存储分组结果(更规范,避免全局变量混乱)

如果不想创建太多全局变量,推荐用字典来统一存储所有分组结果,方便后续操作:

position_groups = {
    'att': ['FW', 'LW', 'RW'],
    'mid': ['AM', 'CM', 'DM', 'LM', 'RM'],
    'defender': ['CB', 'DF', 'GK', 'LB', 'MF', 'RB', 'WB']
}

# 创建一个空字典来存储分组后的DataFrame
grouped_dfs = {}
for var_name, positions in position_groups.items():
    grouped_dfs[var_name] = df[df['position_new'].isin(positions)].copy()

# 使用时直接通过字典键调用,比如 grouped_dfs['att']

关键说明

  1. isin()方法:用来判断position_new的值是否在指定列表中,这是多值筛选的正确写法,替代你原来错误的df.loc[df['position_new'] == 'FW', 'LW', 'RW']。
  2. copy()方法:加上这个是为了避免后续修改分组后的DataFrame时影响原数据,属于安全操作。
  3. 循环逻辑:我们循环的是分组规则字典,而不是原DataFrame的列,这样一次循环就能完成所有分组的创建,完全替代重复的硬编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:07:28