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