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

Pandas中根据Location列值提取Left/Right列整数至Barcelona_result列问题

问题分析与解决办法

原代码的问题

  1. 语法错误:for i in df['Location']末尾缺少冒号,代码无法正常运行
  2. 逻辑完全错误:你遍历Location的每个值,但每次操作都是对整个Barcelona_result列做累加,而非针对当前行。再加上代码里的break,循环只会执行一次——如果第一行是主场,就给所有行的结果加上Left列的值,然后直接终止循环,客场的行根本没机会处理;如果第一行是客场,就加Right后终止,结果全错。
  3. 缩进错误:break的缩进位置不对,导致它必然在第一次循环后执行,直接终止循环。

正确的实现方式

Pandas推荐用向量化操作代替逐行循环,既高效又不易出错,以下是几种可行方案:

方案1:用np.where(最简洁高效)

import numpy as np
df['Barcelona_result'] = np.where(df['Location'] == 'Home', df['Left'], df['Right'])

这个方法会逐行判断Location的值,对应取Left或Right列的数值,直接生成目标列。

方案2:用loc索引赋值

# 先初始化列
df['Barcelona_result'] = 0
# 给主场行赋值
df.loc[df['Location'] == 'Home', 'Barcelona_result'] = df['Left']
# 给客场行赋值
df.loc[df['Location'] == 'Away', 'Barcelona_result'] = df['Right']

通过loc精准定位主客场的行,分别赋值对应的进球数。

方案3:用apply(适合复杂逻辑场景)

如果之后有更复杂的判断逻辑,可以用apply逐行处理:

df['Barcelona_result'] = df.apply(lambda row: row['Left'] if row['Location'] == 'Home' else row['Right'], axis=1)

不过这种方法效率比前两种低,数据量大时不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:45:33