如何计算大熊猫的手段和std?

时间:2017-07-05 09:24:37

标签: python pandas

例如,我们有以下数据:

#include <stdio.h>

int main(int argc, char **argv)
{
    int n = 6;
    int tab[6] = {1,2,8,4,5,6};
    int diff = tab[1] - tab[0], maxdiff = diff, i;

    for(i=2; i<n-1; i++)
    {
        if(diff > maxdiff)
            maxdiff = diff;

        diff = tab[i] - tab[i-1];
    }

    printf("%d\n", diff);

    return 0;
}

我想得到像

这样的结果
>>> df
   name  score  times
0   tom    100      1
1   tom     99      2
2   tom    100      3
3  jack     99      1
4  jack     99      2
5  tony    100      1
6  tony    100      2
7  tony    100      3

是否可以立即获得结果? 现在我必须单独计算它们并结合结果

3 个答案:

答案 0 :(得分:2)

使用agg

In [274]: df.groupby('name').agg({'score': ['mean', 'std']})
Out[274]:
           score
            mean      std
name
jack   99.000000  0.00000
tom    99.666667  0.57735
tony  100.000000  0.00000

答案 1 :(得分:1)

您可以应用@media Rule功能来计算agg

mean

然后你将获得multiindex dataFrame,以提取级别做以下。

df = df.groupby('name').agg({'score': ['mean', 'std']})

如您给出的输出请执行以下操作:

df = df.xs('score', axis=1, drop_level=True)
    # 'score' : key on which to get cross section
    # axis=1 : get cross section of column
    # drop_level=True : returns cross section without the multilevel index

然后重命名

df = df.reset_index('name')

输出:

df.rename(columns={"mean":"score"}, inplace=True)

答案 2 :(得分:0)

要准确获取所需内容,您可以先按名称分组,计算分数的均值和标准,然后重命名并重新索引。

(
     df.groupby('name').score.agg(['mean','std'])
       .rename(columns={'mean':'score'}).reset_index()
)
Out[204]: 
   name       score      std
0  jack   99.000000  0.00000
1   tom   99.666667  0.57735
2  tony  100.000000  0.00000