我有一个看起来像这样的数据框-
>>> 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/