#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())