代码之家  ›  专栏  ›  技术社区  ›  chrise

熊猫会得到一个带有“自定义描述”的数据框

  •  0
  • chrise  · 技术社区  · 6 年前

    我有一个数据框,看起来像

    dftest=pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns= 
    ['w','v1','v2','v3'])
    df['x']=np.random.choice(a=[False, True], size=(1, 10), p=[0.5, 0.5])[0]
    

    我想得到一个等于

    df.groupby('x').describe()
    

    除了我想得到加权平均数

    df.groupby(['x']).apply(lambda x: np.average(x['v1'], weights=x['w'], axis=0))
    

    作为附加列'std'/('count'-1)

    当我尝试

    df.groupby(['x']).apply(lambda x: np.average(x[['v1','v2','v3']], weights=x['w'], axis=0))
    

    我得到一个数据框,其中有1列包含3个值的列表,而不是3列。

    如何将这些信息整齐地放入一个常规数据框中?

    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    使用 pd.Series 对于 DataFrame ,如果需要添加到 describe 首先添加新级别 MultiIndex 然后 join :

    df1 = df.groupby('x').describe()
    
    w = df.groupby(['x']).apply(lambda x: pd.Series(np.average(x[['v1','v2','v3']], 
                                              weights=x['w'], axis=0), index=['v1','v2','v3']))
    w.columns = [w.columns, ['w_mean'] * len(w.columns)]
    print (w)
                 v1        v2        v3
             w_mean    w_mean    w_mean
    x                                  
    False  4.047619  2.142857  4.714286
    True   4.750000  3.937500  3.250000
    
    df1 = df1.join(w).sort_index(axis=1)
    print (df1)
             v1                                                             v2  \
            25%  50%   75% count  max      mean  min       std    w_mean   25%   
    x                                                                            
    False  2.25  3.5  6.25   6.0  9.0  4.333333  1.0  3.076795  4.047619  2.00   
    True   1.75  4.5  7.50   4.0  9.0  4.750000  1.0  3.862210  4.750000  2.75   
    
              v3               w                                  \
             std    w_mean   25%  50%   75% count  max mean  min   
    x        ...                                                                
    False    ...     3.271085  4.714286  6.50  8.0  8.75   6.0  9.0  7.0  2.0   
    True     ...     3.109126  3.250000  0.75  3.5  6.75   4.0  9.0  4.0  0.0   
    
    
                std  
    x                
    False  2.683282  
    True   4.242641  
    
    [2 rows x 35 columns]