Добавление стандартного отклонения к среднему значению объекта группы pandas - PullRequest
0 голосов
/ 25 января 2019

У меня есть кадр данных pandas, например:

import pandas as pd
df=pd.DataFrame(data=np.random.rand(10,5),columns=['blue','white','red','green','purple'])
df['group_labels']=['a','a','b','c','b','c','a','c','b','b']

Я бы хотел сгруппировать по 'group_labels', вычислить среднее значение и затем отобразить в новом кадре данных (среднее + - стандартное отклонениезначение).В общем, я хотел бы иметь:

mean_df=df.groupby('group_labels').mean().reset_index()

, но в каждой ячейке мне также нужно отобразить

+- std deviation of the group / sqrt(size of the group)

Возможно ли это?

1 Ответ

0 голосов
/ 25 января 2019

Полагаю, вам нужно DataFrameGroupBy.agg с пользовательской функцией, созданной std, по умолчанию ddof равно 1:

np.random.seed(2019)
df=pd.DataFrame(data=np.random.rand(10,5),columns=['blue','white','red','green','purple'])
df['group_labels']=['a','a','b','c','b','c','a','c','b','b']


def func(x):
    return x.std() / len(x)**(1/2)

Альтернатива:

def func(x):
    return x.std() / np.sqrt(len(x))

df1 = df.groupby('group_labels').agg(['mean', func])
print (df1)
                  blue               white                 red            \
                  mean      func      mean      func      mean      func   
group_labels                                                               
a             0.450134  0.174723  0.401106  0.214163  0.417548  0.009156   
b             0.532030  0.185240  0.595667  0.174218  0.496617  0.150546   
c             0.552874  0.247173  0.382590  0.099883  0.571595  0.222161   

                 green              purple            
                  mean      func      mean      func  
group_labels                                          
a             0.786139  0.156584  0.525661  0.234515  
b             0.505838  0.215673  0.653970  0.114664  
c             0.653841  0.132705  0.587994  0.111854  

Для удаления MultiIndex в столбцах используйте:

df1.columns = df1.columns.map('_'.join)
print (df1)
              blue_mean  blue_func  white_mean  white_func  red_mean  \
group_labels                                                           
a              0.702381   0.201604    0.679590    0.159292  0.743523   
b              0.386550   0.057390    0.418805    0.126278  0.306843   
c              0.636310   0.269986    0.385225    0.240675  0.451133   

              red_func  green_mean  green_func  purple_mean  purple_func  
group_labels                                                              
a             0.083068    0.788519    0.075999     0.738081      0.16673  
b             0.093714    0.792748    0.071369     0.465246      0.15333  
c             0.217406    0.293735    0.108021     0.549472      0.17632  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...