общее количество, общее число нулей, среднее значение и медиана - PullRequest
0 голосов
/ 29 июня 2018

Допустим, у меня есть фрейм данных со столбцом, называемым значениями, и для этого столбца я хочу рассчитать общее число наблюдений, общее число нулевых наблюдений, среднее и медианное значения на группу.

т.е.,

mydf = pd.DataFrame({'date_ym':['2018-01', '2018-01','2018-01','2018-01','2018-02','2018-02','2018-03'],'category':['A','A','A','B','A','B','B'], 'values':[np.nan,4.0,5.1,np.nan,6.2,np.nan,np.nan]})
mydf
Out[134]: 
  category  date_ym  values
0        A  2018-01     NaN
1        A  2018-01     4.0
2        A  2018-01     5.1
3        B  2018-01     NaN
4        A  2018-02     6.2
5        B  2018-02     NaN
6        B  2018-03     NaN

Если я использую groupby и agg, я получаю следующий вывод:

mydf.groupby(['date_ym','category']).agg(['count', 'mean', 'median']).reset_index()
Out[135]: 
   date_ym category values             
                     count  mean median
0  2018-01        A      2  4.55   4.55
1  2018-01        B      0   NaN    NaN
2  2018-02        A      1  6.20   6.20
3  2018-02        B      0   NaN    NaN
4  2018-03        B      0   NaN    NaN

Но вывод, который я действительно хотел бы получить, выглядит следующим образом:

   date_ym category values             
                     count  countNAs mean median
0  2018-01        A      2  1        4.55   4.55
1  2018-01        B      0  1        NaN    NaN
2  2018-02        A      1  0        6.20   6.20
3  2018-02        B      0  1        NaN    NaN
4  2018-03        B      0  1        NaN    NaN

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Это не простой подход, но он делает свою работу.

#aggregate on size which counts NA's
mydf = mydf.groupby(['date_ym','category']).agg(['size', 'count', 'mean', 'median']).reset_index()
#Renaming columns
mydf.columns = ['date_ym','category', 'countNA', 'count', 'mean', 'median']
#countNA = size - count
mydf['countNA'] = mydf['countNA'] - mydf['count']
0 голосов
/ 29 июня 2018

Вы можете использовать

def countNAs(x): return x.isnull().sum()
mydf.groupby(['date_ym','category']).agg(['count',countNAs, 'mean', 'median']).reset_index()
Out[647]: 
   date_ym category values                      
                     count countNAs  mean median
0  2018-01        A      2      1.0  4.55   4.55
1  2018-01        B      0      1.0   NaN    NaN
2  2018-02        A      1      0.0  6.20   6.20
3  2018-02        B      0      1.0   NaN    NaN
4  2018-03        B      0      1.0   NaN    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...