python - 将标准差添加到 pandas groupby 对象的平均值

标签 python pandas pandas-groupby

我有一个 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)

这可能吗?

最佳答案

我相信你需要DataFrameGroupBy.agg使用 std 创建的自定义函数, 默认 ddof1:

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  

关于python - 将标准差添加到 pandas groupby 对象的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54364920/

相关文章:

python - matplotlib savefig 格式参数不起作用

java - 哪些Python模块将有效利用多核处理大量传入消息

pandas - Kaggle文件提交错误(Santander值(value)预测挑战)

python-3.x - 如何检查panda dataframe组是否具有相同的数据

pandas - 扁平化多索引列的简洁方法

python - sympy 中的链式法则

python - 将全局列表附加到全局列表?

python - 如何获取日期列表中一个月的最后一天

python - 如何使用python选择前X列和后Y列

python - Pandas - dataframe groupby - 如何获取多列的总和