如何在Python中创建垃圾箱

时间:2020-07-23 03:00:41

标签: python python-3.x dictionary tuples

我正在尝试在Python中创建数据仓,该仓会产生以下输出。

binsize = 5
data = 0.4, 1.7, 10.7, 8.0, 3.2, 6.7, 11.4, 10.4

(bin_lower_bound - bin_higher_bound)^as a tuple: num_frequency
0.4 - 5.4:  3
5.4 - 10.4: 2
10.4 - 15.4: 3

我尝试使用for循环将数据中的较低值用作第一个bin的lower_bound,然后在每个bin大小处创建一个新bin,直到达到最大值。但不幸的是,没有运气。
我的想法是我也尝试使用字典,但是我试图在没有NUMPY的情况下实现此目的。

箱:{ 0.4-5.4:3 5.4-10.4:2 10.4-15.4:3 }

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

以下方法应该非常有效,并且不使用任何导入(按要求)。值得注意的是,如果这种垃圾箱没有任何内容,那么它将不会显示在结果中。如果您希望看到一个没有结果的仓位为“ 0”,则必须在最小-最大之间快速循环,并将所有仓位设为零。现在,它们是从数据中“即时”生成的。

def frame_to_text(df):
    f = {x: '{{:<{}s}}'.format(table[column].str.len().max()).format for x in header}

    return df.to_string(justify='left', index=False, formatters=f)

答案 1 :(得分:0)

这将适用于任何数据和任何binsize。

data = [0.4, 1.7, 10.7, 8.0, 3.2, 6.7, 11.4, 10.4]
data.sort()

from collections import defaultdict
binsize = 5
minval = min(data)
maxval = max(data)

def create_bins(minval, maxval):
    
    bins = []
    
    while minval < maxval:
        bins.append(f"{str(minval)} - {str(minval + binsize)}")
        minval += binsize
        
    return bins
    
bins = create_bins(minval, maxval)

bins_with_values = defaultdict(list)

i = 0
for val in data:
    
    if i < len(bins):
        
        temp = bins[i].split()
        if val < float(temp[2]):
            bins_with_values[bins[i]].append(val)
        else:
            i += 1
            bins_with_values[bins[i]].append(val)
            
print(bins_with_values)

输出

defaultdict(<class 'list'>, {'0.4 - 5.4': [0.4, 1.7, 3.2], '5.4 - 10.4': [6.7, 8.0], '10.4 - 15.4': [10.4, 10.7, 11.4]})