Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python将数据排序成块_Python_Sorting_Python 2.7_Histogram - Fatal编程技术网

用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)