Pandas - 将值转换为1和0的快速方法

时间:2017-01-13 01:48:34

标签: python pandas

我有一个数据框" df":

   x
0 -2
1  2
2 -4
3  2
4  9
5 -2

我正在尝试找到一种快速创建新列df [' binary']的方法,其中df [' x']中的所有正值都输入为1,并且df [' x']中的负值在新df ['二进制']列中输入为0。真实的框架非常大,所以我试图用速度来做这件事。任何帮助表示赞赏。

谢谢

2 个答案:

答案 0 :(得分:5)

i <<- (i + 1) %% length(list.files(pattern=".csv")) + assign

gt

如果速度是您的追求

df.assign(binary=df.x.gt(0) * 1)

   x  binary
0 -2       0
1  2       1
2 -4       0
3  2       1
4  9       1
5 -2       0

enter image description here

答案 1 :(得分:5)

@ piRSquared的答案很好 - 您可以找到一些方法来加快速度:

$ ipython
In [1]: import numpy as np, pandas as pd
In [2]: df = pd.DataFrame({'x': np.random.random(1000000) - 0.5})
In [3]: %timeit df['binary'] = df['x'].gt(0).astype(np.short)
1000 loops, best of 3: 1.74 ms per loop
In [4]: %timeit df['binary'] = df['x'].gt(0).astype(np.short)
1000 loops, best of 3: 1.78 ms per loop

对我而言比以下更快:

$ ipython
In [1]: import numpy as np, pandas as pd
In [2]: df = pd.DataFrame({'x': np.random.random(1000000) - 0.5})
In [3]: %timeit df.assign(binary=df.x.gt(0)*1)
100 loops, best of 3: 5.48 ms per loop
In [4]: %timeit df.assign(binary=df.x.gt(0)*1)
100 loops, best of 3: 5.54 ms per loop
相关问题