繁体   English   中英

将非零值替换为1

[英]Replace non-zero values with 1

我有一个看起来像这样的数据集:

id    col1   col2   col3
123   10     0      82
456   0      90     16
987   0      0      0

我想将非id列中的所有非零值替换为1。

我试过了:

df.col1 = df.where(df.col1 != 0, 1)

但这将非零替换为1,将零替换为id。

然后,我尝试为此功能设置新的df:

df2 = df.col1 = df.where(df.col1 != 0, 1)

而且行之有效,只是将id列更改为1,然后将非零值更改为1。

排查无法解决的代码或其他方法的任何帮助将不胜感激!

选项1
astype

df

     col1  col2  col3
id                   
123    10     0    82
456     0    90    16
987     0     0     0

df.astype(bool).astype(int)

     col1  col2  col3
id                   
123     1     0     1
456     0     1     1
987     0     0     0

或者,使用gt创建一个蒙版:

df.gt(0).astype(int)

     col1  col2  col3
id                   
123     1     0     1
456     0     1     1
987     0     0     0

如果id不是索引, 请先设置它

df = df.set_index('id')

选项2
mask

df.mask(df > 0, 1)

     col1  col2  col3
id                   
123     1     0     1
456     0     1     1
987     0     0     0

选项3
df.where (请注意与您的方法不同)

df.where(df == 0, 1)

     col1  col2  col3
id                   
123     1     0     1
456     0     1     1
987     0     0     0

np.where类似的解决方案:

pd.DataFrame(np.where(df > 0, 1, 0), index=df.index, columns=df.columns)

     col1  col2  col3
id                   
123     1     0     1
456     0     1     1
987     0     0     0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM