[英]Count number of elements in each column less than x
我有一个 DataFrame,如下所示。 我正在尝试计算每列中小于 2.0 的元素数量,然后我将在 plot 栏中可视化结果。我使用列表和循环来完成它,但我想知道是否有“Pandas 方式”可以快速完成此操作.
x = []
for i in range(6):
x.append(df[df.ix[:,i]<2.0].count()[i])
然后我可以使用 list x
得到一个 bar plot 。
A B C D E F
0 2.142 1.929 1.674 1.547 3.395 2.382
1 2.077 1.871 1.614 1.491 3.110 2.288
2 2.098 1.889 1.610 1.487 3.020 2.262
3 1.990 1.760 1.479 1.366 2.496 2.128
4 1.935 1.765 1.656 1.530 2.786 2.433
In [96]:
df = pd.DataFrame({'a':randn(10), 'b':randn(10), 'c':randn(10)})
df
Out[96]:
a b c
0 -0.849903 0.944912 1.285790
1 -1.038706 1.445381 0.251002
2 0.683135 -0.539052 -0.622439
3 -1.224699 -0.358541 1.361618
4 -0.087021 0.041524 0.151286
5 -0.114031 -0.201018 -0.030050
6 0.001891 1.601687 -0.040442
7 0.024954 -1.839793 0.917328
8 -1.480281 0.079342 -0.405370
9 0.167295 -1.723555 -0.033937
[10 rows x 3 columns]
In [97]:
df[df > 1.0].count()
Out[97]:
a 0
b 2
c 2
dtype: int64
所以在你的情况下:
df[df < 2.0 ].count()
应该管用
编辑
一些时间
In [3]:
%timeit df[df < 1.0 ].count()
%timeit (df < 1.0).sum()
%timeit (df < 1.0).apply(np.count_nonzero)
1000 loops, best of 3: 1.47 ms per loop
1000 loops, best of 3: 560 us per loop
1000 loops, best of 3: 529 us per loop
所以@ DSM的建议是正确的,比我的建议快得多
方法链接是可能的(比较运算符有它们各自的方法,例如<
= lt()
, <=
= le()
):
df.lt(2).sum()
如果您有多个条件要考虑,例如计算 2 到 10 之间的值的数量。那么您可以在两个 boolean 系列上使用 boolean 运算符:
(df.gt(2) & df.lt(10)).sum()
或者你可以使用pd.eval()
:
pd.eval("2 < df < 10").sum()
计算小于 2 或大于 10 的值的个数:
(df.lt(2) | df.gt(10)).sum()
# or
pd.eval("df < 2 or df > 10").sum()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.