【问题标题】:Pandas count number of elements in each column less than x熊猫计算每列中小于 x 的元素数
【发布时间】:2026-01-27 22:30:01
【问题描述】:

我有一个如下所示的 DataFrame。我正在尝试计算每列中小于 2.0 的元素数,然后我将在条形图中可视化结果。我使用列表和循环来做到这一点,但我想知道是否有一种“熊猫方式”可以快速做到这一点。谢谢!

x = []
for i in range(6):
    x.append(df[df.ix[:,i]<2.0].count()[i])

然后我可以使用列表x 获得条形图。

          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

【问题讨论】:

    标签: python matplotlib pandas


    【解决方案1】:
    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 的建议是正确的,而且比我的建议要快得多

    【讨论】:

    • 啊...出于某种原因,我在想如果没有列引用就无法应用掩码。非常感谢!
    • 我认为您不需要从原始帧中进行选择:(df &lt; 2.0).sum() 应该也可以,(df &lt; 2.0).apply(np.count_nonzero) 对于大帧应该更快。
    • @DSM 是的,一如既往,你是对的,我添加了时间,它们明显更快。
    • 如果我们在计算之前要测试多个条件怎么办?比如说 > 2 和
    • 如果 DataFrame 中有 NaN 值,这将产生不一致的结果。即,它们将被计为低于1.0的值。