【发布时间】:2009-12-01 22:17:54
【问题描述】:
我想做一个很好的函数来聚合数组中的数据(它是一个 numpy 记录数组,但它不会改变任何东西)
您想要在一个轴上聚合一组数据:例如,dtype=[(name, (np.str_,8), (job, (np.str_,8), (income, np.uint32)] 的数组,并且您希望获得每个工作的平均收入
我做了这个函数,在示例中它应该被称为aggregate(data,'job','income',mean)
def aggregate(data, key, value, func):
data_per_key = {}
for k,v in zip(data[key], data[value]):
if k not in data_per_key.keys():
data_per_key[k]=[]
data_per_key[k].append(v)
return [(k,func(data_per_key[k])) for k in data_per_key.keys()]
问题是我觉得它不是很好我想把它放在一行中:你有什么想法吗?
感谢路易斯的回答
PS:我想在调用中保留 func,以便您也可以要求中位数、最小值...
【问题讨论】:
-
我不知道 numpy,但你的
dtype的括号似乎有问题.. -
括号不匹配。造成一些额外的混乱。
-
我不理解您的评论,即您“希望将它放在一行中”。当您调用该函数时,这将是一行。函数本身有多少行是否重要?无论如何,我认为您最好的选择是使用
defaultdict作为答案。 -
对于不匹配的问题,我将名称和类型更改为明确并忘记了一些括号......在 matplotlib.mlab 答案中的 1 行中
-
Michael 并且我创建了一个名为
numpy-groupies的包,其中包含一个函数。包在 pypi 上。
标签: python arrays numpy aggregate