我有一个数据帧"df":
x
0 -2
1 2
2 -4
3 2
4 9
5 -2
Run Code Online (Sandbox Code Playgroud)
我试图找到一种快速创建新列df ['binary']的方法,其中df ['x']中的所有正值都输入为1,而df ['x']中的负值输入为0在新的df ['binary']列中.真实的框架非常大,所以我试图用速度来做这件事.任何帮助赞赏.
谢谢
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
Run Code Online (Sandbox Code Playgroud)
如果速度是你的追求
df['binary'] = (df.x.values > 0).astype(np.uint8)
Run Code Online (Sandbox Code Playgroud)
@ 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
Run Code Online (Sandbox Code Playgroud)
比我更快:
$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |