2016-08-18 4 views
1

У меня длинный список столбцов, для которых я хочу рассчитать ненулевое среднее значение, среднее значение & std за один раз. Я не могу просто удалять строки с 0 на основе 1 столбца, потому что значение для другого столбца в том же столбце может не быть 0.Как найти ненулевое среднее/среднее из нескольких столбцов в пандах?

Ниже приведен код, который у меня есть, который вычисляет среднюю, среднюю и т. Д., Включая ноль.

agg_list_oper={'ABC1':[max,np.std,np.mean,np.median], 
    'ABC2':[max,np.std,np.mean,np.median], 
    'ABC3':[max,np.std,np.mean,np.median], 
    'ABC4':[max,np.std,np.mean,np.median], 
..... 
..... 
..... 
    } 

    df=df_tmp.groupby(['id']).agg(agg_list_oper).reset_index() 

Я знаю, что могу писать длинный код с циклами для обработки одной колонки за раз. Есть ли способ сделать это в pandas groupby.agg() или некоторые другие функции элегантно?

ответ

2

Вы можете временно заменить 0 на NaNs. Тогда панды будут игнорировать NaN при вычислении медианов.

df_tmp.replace(0, np.nan).groupby(['id']).agg(agg_list_oper).reset_index() 
+0

Спасибо. Должен ли я использовать np.nanmedian вместо np.median? –

+1

Пока вы используете это внутри 'agg', вам не нужно. Pandas переводит функции numpy в функции pandas, поэтому 'np.median' игнорирует NaNs. Результат будет таким же для обоих. – ayhan

Смежные вопросы