首页 > 解决方案 > 如何在忽略空值的列中获取每个组的计数

问题描述

我试图在忽略空值的列中获取每个组的计数。

数据集:

    A   B   C
1   null    12
1   xx  13
1   yy  14
2   xx  15
2   yy  16
2   zz  12
3   xx  12
3   null    12
3   null    12

预期输出:

A    B
1    2
2    3
3    1

使用的代码:df.groupby(['A'])["b"].apply(lambda x: x.notnull().count())

标签: pythondataframepandas-groupby

解决方案


pandas 库有一对内置函数,可以计算通过该.groupby()方法创建的组中的项目数。不需要使用.apply()您的代码所具有的方法或 lambda。

从熊猫导入数据框

data = [[1,   None,  12],
        [1,   'xx',  13],
        [1,   'yy',  14],
        [2,   'xx',  15],
        [2,   'yy',  16],
        [2,   'zz',  12],
        [3,   'xx',  12],
        [3,   None,  12],
        [3,   None,  12]]

df = DataFrame(data, columns=['A', 'B', 'C'])

数数

Count 将对非空行进行计数。

In [11]: df.groupby(['A'])['B'].count()

Out[11]: 
A
1    2
2    3
3    1
Name: B, dtype: int64

尺寸

另一方面,大小将计算组的所有元素,无论是否存在非空值。

In [12]: df.groupby(['A'])['B'].size()

Out[12]: 
A
1    3
2    3
3    3
Name: B, dtype: int64

推荐阅读