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
相关产品推荐
相关产品推荐

