【问题标题】:standard deviation of multiple columns and use them as them new columns多列的标准偏差并将它们用作新列
【发布时间】:2021-10-19 04:19:19
【问题描述】:

我有一个如下示例的数据框:

 mdata:
       id  f0   f1      f2  ..  fn         
       d1  dft  3       3   ..  5           
       d1  swe  7       4   ..  6           
       d1  rty  5       12  ..  3           
       d2  www  3       2   ..  5           
       d2  tot  1       4   ..  6           
       d2  asa  9       7   ..  9           
       ..   ..      ..  .. ..          
       dm   ..      ..  .. ..          

我想计算每个唯一 id 的数值列的标准偏差和平均值,并将它们用作新列。所以想要的输出应该是这样的:

 output:
       id  f0   f1   f1_std   f1_avg   f2   f2_std  f2_avg  ...    fn  fn_std  fn_avg   
       d1  dfd   3      2        5      3    4.93      6.3   ...     5   1.52    4.6 
       d1  swe   7      2        5      4    4.93      6.3   ...     6   1.52    4.6  
       d1  rty   5      2        5      12   4.93      6.3   ...     3   1.52    4.6  
       d2  www   3      4.16     4.3    2    2.51      4.3   ...     5   2.08    6.6
       d2  tot   1      4.16     4.3    4    2.51      4.3   ...     6   2.08    6.6 
       d2  asa   9      4.16     4.3    7    2.51      4.3   ...     9   2.08    6.6 
       ..   ..      ..   ..    ..      ..         ..    ...     ..   ..
       dm   ..      ..   ..    ..      ..         ..    ...     ..   ..

我正在尝试这段代码:

   mdata['f1_std']=mdata.groupby('id')['f0'].transform(lambda x: x.std(skipna=True, ddof=1))

但它只适用于一个功能。

【问题讨论】:

    标签: python list dataframe statistics


    【解决方案1】:

    你可以尝试一些类似的东西:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'f0':[3,7,5,3,1,9], 'f1':[3,4,12,2,4,7] , 'id':['d1','d1','d1','d2','d2', 'd2']})       
    
    for column in ['f0','f1']:
    
        df[column+'_std']=df[['id',column]].groupby('id').transform(np.std)
    

    返回:

    
       f0  f1  id    f0_std    f1_std
    0   3   3  d1  2.000000  4.932883
    1   7   4  d1  2.000000  4.932883
    2   5  12  d1  2.000000  4.932883
    3   3   2  d2  4.163332  2.516611
    4   1   4  d2  4.163332  2.516611
    5   9   7  d2  4.163332  2.516611
    
    

    【讨论】:

      【解决方案2】:

      此代码也适用:

       newdata=mdata.groupby('id').transform(lambda x: x.std(skipna=True))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 2015-03-29
        相关资源
        最近更新 更多