[英]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.