Python 如何基于列中的值对列中的值进行二进制替换

Python 如何基于列中的值对列中的值进行二进制替换,python,python-3.x,dataframe,replace,Python,Python 3.x,Dataframe,Replace,我有一个数据帧: v1 v2 v3 x b x o x x x x x b b b g b g x g x 我想用1和0替换列中的值。若值等于x(且类型也必须更改),则为1;若值等于其他值,则为0(且类型也必须更改)。我怎么能这么做 我试过这个,但不起作用: for i in range(3): df.iloc[:,i].replace([0,1],['b','x'],inplace=True).astype(&quo

我有一个数据帧:

v1   v2  v3
x    b   x
o    x   x
x    x   x
b    b   b
g    b   g
x    g   x

我想用1和0替换列中的值。若值等于x(且类型也必须更改),则为1;若值等于其他值,则为0(且类型也必须更改)。我怎么能这么做

我试过这个,但不起作用:

for i in range(3):
    df.iloc[:,i].replace([0,1],['b','x'],inplace=True).astype("int")
我不知道如何在每个元素上使用
.applymap()
为“x”以外的任何东西编写带有0的部分

df.applymap(lambda el: 1 if el in ["x", "b"] else 0)
矢量化方法:

pd.DataFrame(df.isin(["x", "b"]), dtype="int", columns=df.columns)
结果

   v1  v2  v3
0   1   1   1
1   0   1   1
2   1   1   1
3   1   1   1
4   0   1   0
5   1   0   1

dtype
int64

您只需执行以下操作,而不是执行
applymap
-

(df=='x').astype(int)
如果要同时检查“x”和“b”,请使用
.isin()
方法-

(df.isin(('x','b'))).astype(int)

对于矢量化方法,另一种方法是
(df==“x”).astype(np.int64)
是的,如果您不需要列名,这确实是一种方法。哎呀,我没有意识到列名被重置了。谢谢。如果我想要它是x和b,我应该这样写pd.DataFrame(df.values==“x”或“b”,dtype=“int”,columns=df.columns)?在这种情况下,使用
df.isin([“x”,“b”)
。答案将相应更新。
(df.isin(('x','b'))).astype(int)
    v1  v2  v3
0   1   1   1
1   0   1   1
2   1   1   1
3   1   1   1
4   0   1   0
5   1   0   1