Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫中基于值的虚拟变量_Python_Pandas - Fatal编程技术网

Python 熊猫中基于值的虚拟变量

Python 熊猫中基于值的虚拟变量,python,pandas,Python,Pandas,我想在pandas中创建一个虚拟变量,如果a列中的值大于0,则该变量的值为1,否则为0。该虚拟对象应存储在新列G中 A B C D E F 2016-01-01 0.571650 0.427669 0.090381 -0.765132 -1.164994 0.244477 2016-01-02 0.834616 0.938302 -0.428445 -0.06714

我想在pandas中创建一个虚拟变量,如果a列中的值大于0,则该变量的值为1,否则为0。该虚拟对象应存储在新列G中

               A         B         C         D         E         F  
2016-01-01  0.571650  0.427669  0.090381 -0.765132 -1.164994  0.244477   
2016-01-02  0.834616  0.938302 -0.428445 -0.067147  0.126845  0.783122   
2016-01-03  1.996946 -0.178791  1.478010  0.424868  2.311478 -0.357036   
2016-01-04  0.423200  0.229080  1.414170  0.258490  0.931763  0.096947   
2016-01-05 -0.400117 -0.785149  1.748607  1.777462 -0.509319  0.314151
目前,我有这个

a = []
for row in df['A']:
    if row > 0:
        a.append(1)
    else:
        a.append(0)
df['G'] = a

这是可行的,但我有一种直觉,必须有一种更好、更简单的方法来做到这一点?

比较整个专栏,并使用以下方法转换
dtype

比较生成一个带有
dtype
bool
的布尔
系列

In [22]:
df['A'] > 0

Out[22]:
2016-01-01     True
2016-01-02     True
2016-01-03     True
2016-01-04     True
2016-01-05    False
Name: A, dtype: bool
因此,将类型强制转换为
int
会将
True
转换为
1
并将
False
转换为
0

对于50k df:

In [36]:
%%timeit 
a=[]
for row in df['A']:
    if row > 0:
        a.append(1)
    else:
        a.append(0)
100 loops, best of 3: 15.1 ms per loop

In [37]:
%timeit df['G'] = (df['A'] > 0).astype(int)

1000 loops, best of 3: 423 µs per loop
因此,矢量化版本的速度提高了约35倍,并且可以更好地扩展更大的dfs

In [36]:
%%timeit 
a=[]
for row in df['A']:
    if row > 0:
        a.append(1)
    else:
        a.append(0)
100 loops, best of 3: 15.1 ms per loop

In [37]:
%timeit df['G'] = (df['A'] > 0).astype(int)

1000 loops, best of 3: 423 µs per loop