2013-12-18 90 views
1

我有我通过阅读使用numpy的制表符分隔文本文件中创建一个矩阵,它看起来是这样的:过滤,分组,并计算统计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

可以过滤像数据这个:http://stackoverflow.com/questions/3030480/numpy-array-how-to-select-indices-satisfying-multiple-conditions 也有一些参考这里的内置功能,也许其中一个功能你需要什么:http://docs.scipy.org/doc/numpy/reference/routines.sort.html –

+7

我建议你看看['pandas'](http://pandas.pydata.org/ )。 – BrenBarn

+0

@BrenBarn:看起来它可能比基础Numpy更适合我需要做的事情。谢谢! – woemler

回答

3

至于除了评论,这是你会怎么做很简单地在大熊猫:

首先我导入示例数据(当然这将取决于你的数据是如何的样子):

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) 

你会得到如下数据框:

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 
+0

谢谢,这正是我一直在寻找的! – woemler