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

Pandas DataFrame按条件给已有Portfolio列赋值全量生效问题求解

问题原因

你现有代码的问题出在赋值操作的右侧没有加对应筛选条件,右侧df['Portfolio'] + df['Open']会对全表所有行做计算,即使左侧只匹配Sell行,也容易出现索引对齐异常、不符合预期的赋值问题。

解决方案

方案1:修正loc写法(推荐,仅修改目标行性能更高)

直接使用增量赋值运算符+=,仅对筛选出的Sell行做Open列累加:

df.loc[df['Buy/Sell'] == 'Sell', 'Portfolio'] += df.loc[df['Buy/Sell'] == 'Sell', 'Open']

如果不习惯增量写法,也可以补全右侧的筛选条件:

df.loc[df['Buy/Sell'] == 'Sell', 'Portfolio'] = df.loc[df['Buy/Sell'] == 'Sell', 'Portfolio'] + df.loc[df['Buy/Sell'] == 'Sell', 'Open']

方案2:用np.where实现(逻辑更直观)

如果已经导入numpy库,可以用条件判断函数直接重算Portfolio列,语义更清晰:

import numpy as np
df['Portfolio'] = np.where(df['Buy/Sell'] == 'Sell', df['Portfolio'] + df['Open'], df['Portfolio'])
注意事项

执行前请确认Portfolio和Open列均为数值类型,避免因字段类型为字符串导致的相加报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:15:05