Python:返回字典中两个值之间的平均值

时间:2017-04-07 16:24:49

标签: python dictionary

我有这个功能:

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

我希望有人可以提供帮助

1 个答案:

答案 0 :(得分:0)

这看起来很像学校的工作。所以你应该把它弄清楚自己。但这是一个提示。您被要求开发的查询是查找前任计数和后继计数之间的平均值。前导是小于或等于输入的最大键,后继是大于输入的最小键。

如果你需要O(log(n)) - 复杂性,那么你可能会看到二元搜索树bintrees是一个很好的包https://pypi.python.org/pypi/bintrees/2.0.4