我正在尝试在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 }
任何帮助将不胜感激。
答案 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]})