Pandas使用.loc按条件给Position列赋值为1不生效如何解决
解决步骤
- 第一步:校验筛选条件有效性
先执行代码确认筛选逻辑是否能匹配到目标行:
针对你提供的样例数据,正常会返回3个True的匹配结果。如果输出全为False,说明print(df['VarC'] <= varv)VarC列为非数值类型,先执行类型转换:import pandas as pd df['VarC'] = pd.to_numeric(df['VarC'], errors='coerce') - 第二步:修复视图赋值问题
赋值失效最常见的原因是当前df为其他DataFrame的切片视图而非独立副本,pandas会拦截视图上的赋值操作避免修改原数据,先生成独立副本再执行赋值即可:df = df.copy() df.loc[df['VarC'] <= varv, 'Position'] = 1 - 备选实现方案
也可以用numpy.where直接生成新列实现需求:import numpy as np df['Position'] = np.where(df['VarC'] <= varv, 1, df['Position'])
内容的提问来源于stack exchange,提问作者Marcos
相关产品推荐
相关产品推荐

