过滤,分组和计算Numpy矩阵数据的统计数据

时间:2013-12-18 02:21:29

标签: python numpy matrix statistics

我有一个矩阵,我是通过使用Numpy读取制表符分隔的文本文件创建的,它看起来像这样:

sample  category_a  category_b  value
------  ----------  ----------  -----
1       A           Z           3.92
2       A           Y           12.43
3       B           Z           5.87
4       B           Y           6.71
etc...

我想过滤或分组数据以执行一些基本统计,例如计算单个类别的每个值的平均值或类别组合。不幸的是,我是Numpy的新手,并没有在文档中看到任何明显的此类功能参考。是否可以按类别对矩阵数据进行分组并执行计算?或者,我是否需要在从文件读取时过滤进入矩阵的数据,然后执行计算?

1 个答案:

答案 0 :(得分:3)

作为评论的补充,这就是你在pandas中非常简单地做到这一点的方法:

首先我导入您的示例数据(当然这取决于您的数据的样子):

import pandas as pd
from StringIO import StringIO
s = """sample  category_a  category_b  value
1       A           Z           3.92
2       A           Y           12.43
3       B           Z           5.87
4       B           Y           6.71"""

df = pd.read_csv(StringIO(s), sep="\s+", index_col=0)

您将获得以下DataFrame:

In [7]: df
Out[7]:
       category_a category_b  value
sample
1               A          Z   3.92
2               A          Y  12.43
3               B          Z   5.87
4               B          Y   6.71

现在,要按类别对数据进行分组并取每组的平均值,您可以执行以下操作:

In [5]: df.groupby('category_a').mean()
Out[5]:
            value
category_a
A           8.175
B           6.290

或者按多个类别进行分组(在这个虚拟示例中,当然平均值并不多,因为每组中只有一个值):

In [6]: df.groupby(['category_a', 'category_b']).mean()
Out[6]:
                       value
category_a category_b
A          Y           12.43
           Z            3.92
B          Y            6.71
           Z            5.87