用Python将数据排序成块
我想根据范围列表聚集数据列表。我想做一个最终结果的柱状图。我知道集合。计数器,但还没有看到有人使用它或其他内置的方法生成集群。我已经写了很长的表格,但我希望有人能提供一些更有效的东西用Python将数据排序成块,python,sorting,python-2.7,histogram,Python,Sorting,Python 2.7,Histogram,我想根据范围列表聚集数据列表。我想做一个最终结果的柱状图。我知道集合。计数器,但还没有看到有人使用它或其他内置的方法生成集群。我已经写了很长的表格,但我希望有人能提供一些更有效的东西 def min_to_sec(val): ret_val = 60 * int(val) return ret_val def hr_to_sec(val): ret_val = 3600 * int(val) return ret_val def histogram(y_lst
def min_to_sec(val):
ret_val = 60 * int(val)
return ret_val
def hr_to_sec(val):
ret_val = 3600 * int(val)
return ret_val
def histogram(y_lst):
x_lst = [ 10,
20,
30,
40,
50,
60,
90,
min_to_sec(2),
min_to_sec(3),
min_to_sec(4),
min_to_sec(5),
min_to_sec(10),
min_to_sec(15),
min_to_sec(20),
]
results = {}
for y_val in y_lst:
for x_val in x_lst:
if y_val < x_val:
results[ str(x_val) ] = results.get( str(x_val), 0) + 1
break
else:
results['greater'] = results.get('greater', 0) + 1
return results
我想要一个类似于计数器的返回值,如下所示:
{
10:3,
20:1,
30:2,
}
因此,虽然我上面的代码可以工作,因为它是一个嵌套的for循环,但速度非常慢,我希望有一种方法可以使用类似collections.Count的东西来执行这种“聚集”操作。您可以使用它来对列表中的元素进行这种计数:
In [1]: from collections import Counter
In [2]: Counter([1, 2, 10, 1, 2, 100])
Out[2]: Counter({1: 2, 2: 2, 100: 1, 10: 1})
您可以更简单地使用以下方法增加计数器:
results['foo'] += 1
为了只计算不平等之前的数字,您可以使用:
[3]中的:从itertools导入takewhile
在[4]中:计数器(takewhile(λx:x<10,[1,2,10,1,2100]))
Out[4]:计数器({1:1,2:1})
然而,这并不能追踪那些已经脱离禁食期的熊猫。你考虑过使用熊猫吗?您可以将
y_lst
放入一个数据帧中,并非常容易地制作直方图
假设已导入matplotlib和pylab
import pandas as pd
data = pd.DataFrame([1, 2, 3, 15, 22, 27, 40])
data[0].hist(bins = 4)
这将为您提供上面描述的直方图。但是,一旦数据进入pandas数据框,按照您的喜好将其切分就不太困难了。重新措辞,得到了我想要的答案:
In [3]: from itertools import takewhile
In [4]: Counter(takewhile(lambda x: x < 10, [1, 2, 10, 1, 2, 100]))
Out[4]: Counter({1: 1, 2: 1})
import pandas as pd
data = pd.DataFrame([1, 2, 3, 15, 22, 27, 40])
data[0].hist(bins = 4)