按组计算多个变量的缺失值

Count missing values of several variables by group with many variables

我想计算数据框中缺失的变量。我有很多我想计算的变量,还有很多我想分组的变量。我知道如何为组中的一个变量执行此操作,但不知道如何执行此操作:

import pandas as pd

df=pd.DataFrame({'type':['A', 'A', 'B'], 'var1':[1, None, 2],'var2':[None, None, 3]})

vars=['var1', 'var2']

df.drop('type', 1)[vars].isna().groupby(df.type, sort=False).sum().reset_index()

尝试次数

df=pd.DataFrame({'type':['A', 'A', 'B'], 'type2':['Z', 'Y', 'Y'], 'var1':[1, None, 2], 
                'var2':[None, None, 3]})
df.drop(['type', 'type2'], 1).isna().groupby(df[['type', 'type2']], sort=False).sum().reset_index()
grouping_vars = ['type', 'type2']
df.drop(grouping_vars, 1).isna().groupby(df[grouping_vars], sort=False).sum().reset_index()

以上两种尝试都给了我

ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional.

我猜我对这里 groupby 的一些基本知识不了解,所以非常感谢您的帮助!

您不能将数据框用作石斑鱼,因为它是二维对象。 Groupby 需要一维 arrays/series 作为石斑鱼。因此,为了修复错误,您可以创建一个一维序列列表(grp_cols),然后将其用作石斑鱼来计算缺失值

keys = ['type', 'type2']
grp_cols = [df[k] for k in keys]
df.drop(keys, axis=1).isna().groupby(grp_cols, sort=False).sum().reset_index()

或者,有一种更简单的方法,您必须先将分组列设置为索引,然后使用 isna 然后使用 groupby + sum 来计算缺失值

keys = ['type', 'type2']
df.set_index(keys).isna().groupby(keys, sort=False).sum().reset_index()

  type type2  var1  var2
0    A     Z     0     1
1    A     Y     1     1
2    B     Y     0     0