Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换数据帧中的特定值_Python_Pandas_Dataframe - Fatal编程技术网

Python 替换数据帧中的特定值

Python 替换数据帧中的特定值,python,pandas,dataframe,Python,Pandas,Dataframe,我在熊猫中有下一个数据帧: data1 = pd.DataFrame(data=[[1, 10, 100], [2,2,200],[3,3,300], [4,40,400]], columns=['A', 'B', 'C']) 这是: A B C 0 1 10 100 1 2 2 200 2 3 3 300 3 4 40 400 我想做什么:查找行,其中'A'='B'并替换此行列'C'值 所

我在熊猫中有下一个数据帧:

data1 = pd.DataFrame(data=[[1, 10, 100], [2,2,200],[3,3,300], [4,40,400]],
                     columns=['A', 'B', 'C'])
这是:

    A   B   C
0   1   10  100
1   2   2   200
2   3   3   300
3   4   40  400
我想做什么:查找行,其中
'A'='B'
并替换此行列
'C'

所以我想得到的是:

    A   B   C
0   1   10  100
1   2   2   -1
2   3   3   -1
3   4   40  400

我已经尝试过的:

data1[data1['A']==data1['B']]
所以我找到了必要的行。现在,我尝试替换此行中的值:

data1[data1['A']==data1['B']]['C'] = -1
但是数据1是一样的!看起来这个困难的链索引出错了,或者所有这些操作都返回了dataframe的副本。但我无法将其保存到新的数据帧,因为我在上一个命令中使用了
=
,我无法写入
newdf=data1[…]=-1
。 我还发现了
replace
功能:

data1.replace(data1[data1['A']==data1['B']], "-1")
但当我只需要最后一列时,它会替换行中的所有值:

    A   B   C
0   1   10  100
1   -1  -1  -1
2   -1  -1  -1
3   4   40  400

另外,我知道我可以用for循环来完成。但是我试图找到更好的(更优雅的)解决方案。

df['C']=np.where(df.A==df.B,-1,df.C)
df['C']=np.where(df.A==df.B,-1,df.C)
使用DataFrame.loc

mask = data1['A'] == data1['B']
data1.loc[mask, 'C'] = -1
使用DataFrame.loc

mask = data1['A'] == data1['B']
data1.loc[mask, 'C'] = -1

您可以使用pandas
mask

data1.C=data1.C.mask(data1.A==data1.B,-1)
data1
Out[371]: 
   A   B    C
0  1  10  100
1  2   2   -1
2  3   3   -1
3  4  40  400

您可以使用pandas
mask

data1.C=data1.C.mask(data1.A==data1.B,-1)
data1
Out[371]: 
   A   B    C
0  1  10  100
1  2   2   -1
2  3   3   -1
3  4  40  400

你确定这是正确答案吗?我试过了,只得到了最后一列(是的,值正确)。您需要重新编制索引,例如
df['C']=
您能添加解释吗?这本身对OP的帮助很大。你确定这是正确的答案吗?我试过了,只得到了最后一列(是的,值正确)。您需要重新编制索引,例如
df['C']=
您能添加解释吗?这本身只对OP有很大帮助,效果非常好!那太好了!它起作用了!同样的解决方案,因为它的工作!与相同的解决方案