基于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']
关键说明
isin()方法:用来判断position_new的值是否在指定列表中,这是多值筛选的正确写法,替代你原来错误的df.loc[df['position_new'] == 'FW', 'LW', 'RW']。copy()方法:加上这个是为了避免后续修改分组后的DataFrame时影响原数据,属于安全操作。- 循环逻辑:我们循环的是分组规则字典,而不是原DataFrame的列,这样一次循环就能完成所有分组的创建,完全替代重复的硬编码。
内容的提问来源于stack exchange,提问作者Kasper
相关产品推荐
相关产品推荐

