Python 熊猫:无法基于其他列上的条件设置单元格值

Python 熊猫:无法基于其他列上的条件设置单元格值,python,Python,我有一个数据框,如下所示: ID Score Bid_Doc_ID 1 67 3 2 -1 2 3 -1 7 我想将Bid\u Doc\u ID字段设置为-1,其中Score=-1 为此,我使用以下代码: df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 我得到了以下错误: AttributeError: 'int' object has no attribute 'loc'

我有一个数据框,如下所示:

ID   Score   Bid_Doc_ID
1      67       3
2      -1       2
3      -1       7
我想将
Bid\u Doc\u ID
字段设置为-1,其中
Score
=-1

为此,我使用以下代码:

df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1
我得到了以下错误:

AttributeError: 'int' object has no attribute 'loc'
就连我也试过:

df = df.loc[df['Score'].astype(str)==-1,'Bid_Doc_ID']=-1
仍然得到相同的错误

我的预期结果:

ID   Score   Bid_Doc_ID
1      67        3
2      -1       -1
3      -1       -1

这个问题似乎很琐碎,但我有点遗漏了一些东西

尝试删除分配新的
df
的代码部分:

df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # change
df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # to be this
或者,您也可以使用
np.where

import numpy as np
df['Bid_Doc_ID'] = np.where(df['Score'] == -1, -1, df['Bid_Doc_ID'])

当您运行
df=df.loc[df['Score'].astype(str)=-1,'Bid\u Doc\u ID']=-1
时,您似乎用整数或布尔值重写了df(这就是
'int'对象没有属性'loc'
错误的原因)。尝试检查df的值以验证这一点

如果您在适当的位置修改DF,会发生很多情况,这绝不是一个好主意,最好将修改后的数据帧分配给一个新变量,例如,
DF\u fixed
,这将节省您大量的调试时间,甚至更糟的是,在生产中释放bug

尝试下面的方法,虽然不太简洁,但它使用了纯熊猫方法和方法链接,这是目前推荐的方法


投标文件id固定=df.apply(λx:-1,如果x['Score']=-1,否则x['bid\u doc\u id'],轴=1)
df\U fixed=df.assign(投标文件ID=Bid\U文件ID\U fixed)

尝试删除第一个
df=
。只需
df.loc[df['Score']=-1,'Bid\u Doc\u ID']=-1
此更新已完成,您无需将其分配回df。删除df=part是否有人被错误消息弄糊涂了?我试过
x=[1,2];x=x[0]=[2,3];打印(x)
,并且不希望输出
[…],3]
没有错误。