2013-12-18 124 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