我有一个包含两列的数据帧。A列包含值0和1,B列包含值"0"one_answers"99"。像这样:
df = pd.DataFrame({'A': [0,0,0,1,1,0,0,1,1,0],
'B': [99,1,0,99,99,1,1,99,99,99]})
A B
0 0 99
1 0 1
2 0 0
3 1 99
4 1 99
5 0 1
6 0 1
7 1 99
8 1 99
9 0 99
当列A的对应值为1时,我需要将列B中的所有值99替换为0,我尝试了以下操作:
df = df[df['A']==1].replace({'B': {99: 0}})
A B
3 1 0
4 1 0
7 1 0
8 1 0
但当尝试这样做时,我丢失了数据帧中A为0的部分。我怎样才能做到这一点而不丢失那一部分?
这里有一种方法可以实现
using Loc
df.loc[(df['A']== 1) & (df['B']==99), 'B'] = 0
df
或
# using mask
df['B']= df['B'].mask((df['A']== 1) & (df['B']==99), 0)
df
A B
0 0 0
1 0 1
2 0 0
3 1 0
4 1 0
5 0 1
6 0 1
7 1 0
8 1 0
9 0 0