我有一个这样的相框
CLASS FEATURE1 FEATURE2 FEATURE3
X A NaN NaN
X NaN A NaN
B A A A
字符串
我想按标签CLASS
分组,并显示每个特征中计数的NaN值的数量,使其看起来像这样。目的是大致了解缺失值如何分布在不同的类中。
CLASS FEATURE1 FEATURE2 FEATURE3
X 1 1 2
B 0 0 0
型
我知道如何接收 * 非空 * 值的数量-df.groupby['CLASS'].count()
- NaN* 值是否有类似的情况?
我试图从size()
中减去count()
,但它返回了一个未格式化的输出,其中填充了值NaN
5条答案
按热度按时间zengzsys1#
用
isna
计算掩码,然后分组并求和:字符串
另一种选择是使用
rsub
沿沿着第0轴从count
中减去size
,以进行索引对齐减法:型
或者,
型
型
有很多很好的答案,所以这里有一些
timeits
供您阅读:型
实际性能取决于您的数据和设置,因此您的里程可能会有所不同。
odopli942#
由于未来警告而更新:
未来警告:不建议在DataFrame和Series聚合中使用level关键字,并且将在将来的版本中删除。请改用groupby。df.sum(level=1)应使用df.groupby(level=1).sum()。
df.set_index('CLASS').isna().sum(level=0)
字符串
可以使用
set_index
和sum
:型
输出量:
型
ifmq2ha23#
使用
count
和size
之间的差异字符串
我们可以将这个问题转换为更一般的问题,如何在for循环中计算
NaN
的数量型
hgqdbh6s4#
不使用
groupby
的解决方案可以是使用pivot_table
和自定义聚合函数。这个解决方案可能比其他解决方案更清楚地传达意图(至少对我来说)。
生成嵌套框架:
字符串
生成透视表:
型
性能:
此外,在性能方面,该解决方案似乎是最快的。
的数据
sbtkgmzw5#
另一个解决方案(主要是为了好玩):
字符串