【问题标题】:Transform table to show standard deviations with mean in Python转换表以在 Python 中显示标准差和平均值
【发布时间】:2021-02-28 06:02:57
【问题描述】:

我有一个数据框 df,我想在其中按 ID 分组并显示给定时间段的平均值以及标准差列表(1sd、2sd、3sd)

id  start       end         diff  percent   date
a   4/1/2019    5/1/2019    160   11        04-01-2019 to 05-01-2019
a   5/1/2019    6/1/2019    136   8         05-01-2019 to 06-01-2019
a   6/1/2019    7/1/2019    174   9         06-01-2019 to 07-01-2019
b   4/1/2019    5/1/2019    112   5         04-01-2019 to 05-01-2019
b   5/1/2019    6/1/2019    141   6         05-01-2019 to 06-01-2019

期望的输出

id  mean       st.deviation   sd1          sd2      sd3
a   156.6      19.2           137.4        118.2    99                        
b   126.5      20.5           106          86.4     65




Standard deviation sd1 = mean - 1(19.2) 
                   sd2 = mean - 2(19.2)
                   sd3 = mean - 3(19.2)

这就是我正在做的:

import pandas
import numpy
import math
import sys

def sd_calc(df):
    n = len(df)

    if n <= 1:
        return 0.0

    mean, sd = avg_calc(df), 0.0

    # calculate stan. dev.
    for el in df:
        sd += (float(el) - mean)**2
    sd = math.sqrt(sd / float(n-1))

    return sd   

         

我能够计算标准差,但不确定如何将其纳入 Pandas 数据框。

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    让我们试试stdgroupby

    out = df.groupby('id')['diff'].agg(['mean','std'])
    Out[44]: 
              mean        std
    id                       
    a   156.666667  19.218047
    b   126.500000  20.506097
    

    对于 std1 到 std3 ,您可以通过创建

    out['std1'] = out['mean'] - out['std']
    

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 2013-01-10
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2020-04-15
      相关资源
      最近更新 更多