用1替换pandas数据帧中的非零值

时间:2017-08-21 06:51:08

标签: python pandas dataframe

我有一个pandas数据帧'结果'。此数据框中的一个属性是“交易”,如果是非现金交易,则包含值0,如果交易是现金交易,则包含一些实数。此属性如下所示:

result['transaction'] = [0,0,0,23.2,432,12,0,0,56.4]

我想更改此属性的值,以便所有非零值都将替换为1.因此,我的结果属性应如下所示:

result['transaction'] = [0,0,0,1,1,1,0,0,1]

我该怎么做?

2 个答案:

答案 0 :(得分:5)

另一种选择可能是使用astype转换为bool,然后转换为int

df.astype(bool).astype(int)

哪个输出

   transaction
0            0
1            0
2            0 
3            1
4            1
5            1
6            0
7            0
8            1

根据我的经验,这种方法已被证明非常快。

答案 1 :(得分:3)

原始数据框:

df
    col1
0    0.0
1    0.0
2    0.0
3   23.2
4  432.0
5   12.0
6    0.0
7    0.0
8   56.4

df.where

您可以使用df.where过滤并指定:

df.col1 = df.where(df.col1 == 0, 1)
df
   col1
0   0.0
1   0.0
2   0.0
3   1.0
4   1.0
5   1.0
6   0.0
7   0.0
8   1.0

布尔索引

您还可以将boolean indexing与更简单的谓词一起使用:

df[df.col1 != 0] = 1
df
   col1
0   0.0
1   0.0
2   0.0
3   1.0
4   1.0
5   1.0
6   0.0
7   0.0
8   1.0

df.map

df[df.col1.map((0).__ne__)] = 1
df
   col1
0   0.0
1   0.0
2   0.0
3   1.0
4   1.0
5   1.0
6   0.0
7   0.0
8   1.0

请注意,对于每种方法,如果要删除输出的浮点部分,可以使用.astype(int)