python - group by 的值计数不显示 pandas 中 null/NA 值的计数

标签 python pandas

我有一个看起来像这样的数据框-

>>> df
     A     B
0  1.0  good
1  2.0  good
2  1.0  good
3  2.0  good
4  1.0   bad
5  1.0   bad
6  2.0   bad
7  2.0   bad
8  NaN  good

我想根据 A 列中的不同值获取 B 列值的计数。因此我按如下方式使用 groupby,并得到结果 -

>>> df.groupby('A')['B'].value_counts()
A    B   
1.0  bad     2
     good    2
2.0  bad     2
     good    2
Name: B, dtype: int64

但它没有显示 A 列中 nan 值的计数。我真正想要的是显示 NaN 的计数 -

A    B   
1.0  bad     2
     good    2
2.0  bad     2
     good    2
NaN  good    1
Name: B, dtype: int64

我什至尝试使用dropna = False,但它也没有显示我预期的结果。
谁能告诉我如何在结果中得到 NaN ?

最佳答案

一个有效的技巧是将 A 转换为字符串。

df.assign(A=df.A.astype(str)).groupby('A')['B'].value_counts()

或者,更简洁地说,

df.groupby(df.A.astype(str))['B'].value_counts()

A    B   
1.0  bad     2
     good    2
2.0  bad     2
     good    2
nan  good    1
Name: B, dtype: int64

groupby 默认会在石斑鱼上丢弃 NaN(缺失数据),因此在 value_counts 步骤中甚至不会考虑它。

同样,您还可以考虑使用crosstab

pd.crosstab(df.A.astype(str), df.B, dropna=False).stack()

A    B   
1.0  bad     2
     good    2
2.0  bad     2
     good    2
nan  bad     0
     good    1
dtype: int64

这也会给你 0 计数。

关于python - group by 的值计数不显示 pandas 中 null/NA 值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50961859/

相关文章:

python - 如何在 python 中拆分文件?

python - Python:file.readline在行尾添加一个空格

python - 在 Mayavi 中以 0 为中心的颜色图

python-3.x - 根据存储在向量中的列名称对 pandas 数据框进行子集化

python-3.x - AttributeError : Cannot access callable attribute 'reset_index' of 'DataFrameGroupBy' objects, 尝试使用 'apply' 方法

python - Azure 存储 get_blob_to_stream 无法将保存的 csv 文件下载为流

python - 用 pandas 查找树中叶节点的所有祖先

python - 从列中过滤掉非数字值

python - Django 将 mysql 中的数据显示到 HTML 表

python - 对 pandas 系列使用颜色图