我有这个功能:
def find_nearest(array,value):
idx = (np.abs(array-value)).argmin()
return array[idx]
def df_to_count_dict(df):
count_dict = Counter(df.values)
holder = []
for i in range(1,max(list(count_dict.keys()))):
if i in count_dict.keys(): continue
holder.append(i)
for i in holder:
j = find_nearest(np.array(list(count_dict.keys())),i)
count_dict.update({i:count_dict[j]})
return count_dict
它的作用是采用数据系列并使用集合中的Counter函数返回字典。它还用最接近的值替换字典中没有的值。
现在,我想修改此函数以返回相同的对象count_dict,但是替换不在字典键中的值,以及缺失值之间的平均值。
最好用一个例子来解释:
拿
test = pd.Series([1,2,3,3,7,7,7,8])
如果没有上述功能,我们会得到:
Counter(test.values)
Out[459]: Counter({1: 1, 2: 1, 3: 2, 7: 3, 8: 1})
使用我们得到的功能
df_to_count_dict(test)
Out[458]: Counter({1: 1, 2: 1, 3: 2, 4: 2, 5: 2, 6: 2, 7: 3, 8: 1})
正如您所看到的那样,它添加了键4,5,6,值为2,因为2是最近键的值(最近的键是3)。
我要返回的是下最近键和上最近键的值之间的平均值,因此上面最近的键是3,其值为2,上面最近的键是7,其值为3 ,所以我希望最终产品看起来像:
df_to_count_dict(test)
Out[458]: Counter({1: 1, 2: 1, 3: 2, 4: 2.5, 5: 2.5, 6: 2.5, 7: 3, 8: 1})
我希望有人可以提供帮助
答案 0 :(得分:0)
这看起来很像学校的工作。所以你应该把它弄清楚自己。但这是一个提示。您被要求开发的查询是查找前任计数和后继计数之间的平均值。前导是小于或等于输入的最大键,后继是大于输入的最小键。
如果你需要O(log(n)) - 复杂性,那么你可能会看到二元搜索树bintrees是一个很好的包https://pypi.python.org/pypi/bintrees/2.0.4。