我有一个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]
我该怎么做?
答案 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)
。