根据其他列中的值替换列值

Mic*_*lle 8 python pandas

到目前为止,我的数据框如下所示:

ID   Area   Stage
1    P      X
2    Q      X
3    P      X
4    Q      Y
Run Code Online (Sandbox Code Playgroud)

对于舞台等于“X”的每一行,我想用“P”替换区域“Q”。

所以结果应该是这样的:

ID   Area   Stage
1    P      X
2    P      X
3    P      X
4    Q      Y
Run Code Online (Sandbox Code Playgroud)

我试过:

data.query('Stage in ["X"]')['Area']=data.query('Stage in ["X"]')['Area'].replace('Q','P')
Run Code Online (Sandbox Code Playgroud)

这是行不通的。帮助表示赞赏!:)

ank*_*_91 5

您可以使用 2 个布尔条件并使用loc

df.loc[df['Area'].eq("Q") & df['Stage'].eq('X'),'Area']='P'
print(df)
Run Code Online (Sandbox Code Playgroud)
   ID Area Stage
0   1    P     X
1   2    P     X
2   3    P     X
3   4    Q     Y
Run Code Online (Sandbox Code Playgroud)

或者np.where

df['Area'] = np.where(df['Area'].eq("Q") & df['Stage'].eq('X'),'P',df['Area'])
Run Code Online (Sandbox Code Playgroud)

  • @RavinderSingh13谢谢,我认为应该添加另一个条件,因为“Stage==X”和“Area==Z”也可能被替换为“P”,否则:-) (2认同)

Qua*_*ang 3

您可以使用loc指定要替换的位置,并将替换的系列传递给作业:

df.loc[df['Stage']=='X', 'Area'] = df['Area'].replace('Q','P')
Run Code Online (Sandbox Code Playgroud)

输出:

   ID Area Stage
0   1    P     X
1   2    P     X
2   3    P     X
3   4    Q     Y
Run Code Online (Sandbox Code Playgroud)