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有很大帮助,效果非常好!那太好了!它起作用了!同样的解决方案,因为它的工作!与相同的解决方案