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

Pandas指定列存在特定值时对另一列对应值相乘的实现问题

问题分析
  • 循环逻辑错误:遍历Result列每个值时,判断条件写的是检查整个Result列是否存在Bad,而非判断当前遍历的行取值是否为Bad,导致判断逻辑完全失效
  • 赋值逻辑缺失:df['Value'] * 2仅生成了计算后的临时序列,没有赋值回原DataFrame,且该写法会对全列执行乘法,不符合只修改指定行的需求
  • 性能问题:Pandas优先推荐向量化操作代替逐行for循环,运行效率更高,代码也更简洁
正确实现代码
import pandas as pd

data = {'Person': ['Jim', 'Jim', 'Jim', 'Jim', 'Jim', 'Bob','Bob','Bob','Bob','Bob',], 
'Result': ['Good', 'Good','Good','Good','Good','Good','Bad','Good','Bad','Bad',],
'Value':[1,2,3,1,2,3,1,2,1,4]}
df = pd.DataFrame.from_dict(data)

# 核心逻辑:用loc定位满足条件的行,直接修改对应Value列的值
df.loc[df['Result'] == 'Bad', 'Value'] *= 2

print(df)
代码说明

df.loc[行筛选条件, 列名]是Pandas专门用于定位、修改指定行列数据的方法:

  • 第一个参数df['Result'] == 'Bad'会生成布尔序列,筛选出所有Result列为Bad的行
  • 第二个参数指定要修改的列是Value
  • *= 2等价于= df.loc[...] * 2,直接把计算结果赋值回原DataFrame的对应位置

运行上述代码后输出的结果和你预期的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 16:27:03