我有一个如下所示的数据集:
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。
非常感谢任何帮助排除无效代码或其他方法的帮助!
答案 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