Python 如何为stats.binned_statistic编程一个函数,该函数统计每个bin中的值的数量,而不重复?

Python 如何为stats.binned_statistic编程一个函数,该函数统计每个bin中的值的数量,而不重复?,python,Python,有没有一种方法可以在不计算重复项的情况下计算存储箱中的值数?stats.binned_statistic似乎对我最有帮助,但唯一的问题是我似乎无法定义一个函数来返回正确的值计数。这就是我到目前为止所做的: bin_count, bin_edges, bin_number = stats.binned_statistic(time, values, statistic=lambda y: len(set(y)), bins=range(0, finaltime, 5)) 出现的错误是“Typ

有没有一种方法可以在不计算重复项的情况下计算存储箱中的值数?stats.binned_statistic似乎对我最有帮助,但唯一的问题是我似乎无法定义一个函数来返回正确的值计数。这就是我到目前为止所做的:

bin_count, bin_edges, bin_number = stats.binned_statistic(time, values,   statistic=lambda y: len(set(y)), bins=range(0, finaltime, 5))
出现的错误是“TypeError:只有包含一个元素的整数数组才能转换为索引”

因此,如果我有时间=[1,1,1,2,4,7,8,10]和值=[7,3,9,3,5,7,11,45],我希望bin_计数是[4,3]而不是[5,3],这是这个函数中预定义的“计数”给我的


如果有人能帮我完成我的功能或者用其他方法解决这个问题,那就太好了

您可以在将时间数组传递给binned_统计之前对其进行唯一化

bc,be,bn = binned_statistic(list(set(time)),None,statistic='count',bins=2)
将可调用项传递给binned_statistic似乎从来都不起作用(尝试传递statistic=sum和statistic=“sum”。它们应该是等价的,但它们不是。奇怪。)

尝试将您的值组合起来并简化您自己:

dv = numpy.digitize(time,numpy.arange(0,10,5))
udict = {}
udict.update([((dv[i],v),t) for i,(t,v) in enumerate(zip(time,values))])
nv,nt = zip(*[(k[1],udict[k]) for k in udict.keys()])
bc,be,bn = binned_statistic(nt,nv,statistic='count',bins=2)
基本上,将您的值传递给numpy.digital,这将为每个值分配一个bin
enumerate(zip(time,values))
生成时间-值对的编号列表,我将其重新排列一点,以构建一个由bin值组合键控的字典,其中值是对应的时间。然后检索字典的每个成员将生成一个新的值和时间数组,其中时间-值对相对于特定bin中的值是唯一的。然后根据规范,通过binned_统计运行它


((这非常难以阅读,等等。我欢迎高级解决方案。当你想保留一些其他可以不同的数据时,创建唯一是很困难的。)

但是我希望值是唯一的,而不是时间数组。你希望
值是唯一的,但是基于
时间的bin标识是唯一的?没错!因此,bin基于时间,在每个bin中,计算唯一值的数量。