Нахождение процента ненулевых значений в каждом столбце для каждого подмножества в groupby

#python #pandas #dataframe #numpy #notnull

Вопрос:

Я пытаюсь вывести процент не-нулевых значений в каждом столбце для каждого подмножества groupby. Группировка выполняется в столбце «Агент». Не могли бы вы, пожалуйста, помочь мне с этим? Я попробовал что-то вроде этого:

[код]

 df.groupby('Agent').apply(lambda x: x.notnull().sum()/len(x)*100)
 

Ответ №1:

Самый быстрый способ получить процент ненулевых значений, вероятно, состоит в том, чтобы преобразовать столбцы данных в значение True или False, а затем просто выполнить операцию groupby mean. Средняя операция над двоичным столбцом неявно вычисляет процент значений, которые являются истинными, поскольку она рассматривает True как 1, а False как 0.

 agents = ['A','A','A','B','B','C','C','C','C', 'D']
data = pd.DataFrame(data={
    'Agent': agents,
    'x': range(len(agents)),
    'y': range(len(agents))
})

data.loc[[0, 4, 5], 'x'] = np.nan
data.loc[[1, 3, 9], 'y'] = np.nan

# Percentage non-missing grouped by Agent
100*(1-data.set_index('Agent').isnull().groupby(level='Agent').mean())