如何在Python中创建容器

2024-04-25 06:51:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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循环将数据中的较低值用作第一个箱子的下限,然后在每个箱子大小上创建一个新箱子,直到达到最大值为止。但不幸的是,运气不好。
我的想法是,我也在尝试使用字典,但我正在尝试在没有NUMPY的情况下实现这一点

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

任何帮助都将不胜感激


Tags: 数据fordatabinaslowernumbound
2条回答

这将适用于任何数据和任何容器大小

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]})

下面的方法应该非常有效,并且不使用任何导入(根据要求)。需要注意的是,如果有一个没有任何内容的bin,它将不会显示在结果中。如果您希望看到一个没有结果的箱子显示为“0”,则必须在“最小-最大”和“零”的所有箱子之间快速切换一圈。现在,它们是根据数据“即时”制作的

binsize = 5
data = [0.4, 1.7, 10.7, 8.0, 3.2, 6.7, 11.4, 10.4]
min_val = min(data)  # needed to anchor the first bin
bins = {}
for value in data:
    bin_num = int((value - min_val) // binsize) # integer division to find bin
    bins[bin_num] = bins.get(bin_num, 0) + 1

# pretty up the labels...optional
bins2 = { (round(k*binsize+min_val,1), round((k+1)*binsize+min_val,1)) : 
            bins[k] for k in bins }

# or with string-based labels
bins3 = { f'{round(k*binsize+min_val,1)} - {round((k+1)*binsize+min_val,1)}' : 
            bins[k] for k in bins}    

print(bins2)
# {(0.4, 5.4): 3, (2.4, 7.4): 3, (1.4, 6.4): 2}
print(bins3)
# {'0.4 - 5.4': 3, '2.4 - 7.4': 3, '1.4 - 6.4': 2}

相关问题 更多 >