In [66]:
df.lt(0).sum()
Out[66]:
a 2
b 1
c 1
d 0
dtype: int64
再次调用sum对Series进行求和:
In [58]:
df.lt(0).sum().sum()
Out[58]:
4
还可以将布尔df转换为一维数组并调用np.sum:
In [62]:
np.sum((df < 0).values.ravel())
Out[62]:
4
计时
对于30K行df:
In [70]:
%timeit sum(n < 0 for n in df.values.flatten())
%timeit df.lt(0).sum().sum()
%timeit np.sum((df < 0).values.ravel())
1 loops, best of 3: 405 ms per loop
100 loops, best of 3: 2.36 ms per loop
1000 loops, best of 3: 770 µs per loop
可以展平数据帧以使用在1D数组上操作的函数。所以如果你同意的话(可能比EdChum的回答慢):
我在用下面的。可能不是最好的办法。
可以调用
.lt
将df与标量值进行比较,然后调用sum
两次(这是因为它首先对行进行求和)再次调用
sum
对Series
进行求和:还可以将布尔df转换为一维数组并调用
np.sum
:计时
对于30K行df:
np方法比loop方法快约525倍,比纯pandas方法快约4倍
相关问题 更多 >
编程相关推荐