我有一个矩阵,我是通过使用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的新手,并没有在文档中看到任何明显的此类功能参考。是否可以按类别对矩阵数据进行分组并执行计算?或者,我是否需要在从文件读取时过滤进入矩阵的数据,然后执行计算?
答案 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