用1替换非零值



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

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

我想在列中替换所有非ID中的所有非零值。

我尝试过:

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

,但这用1 s替换为1S,用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

最新更新