用1

时间:2017-11-19 23:00:20

标签: python pandas

我有一个如下所示的数据集:

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 个答案:

答案 0 :(得分:2)

选项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