记录以以下形式存储在数据库中:
我正在编写一个函数,用于计算不同clu变量(例如,q和e)的给定值之和。也就是说,首先确定name的哪些值对应于e的值(它们是3和4)。然后是字典“e_dict”,它存储与不同名称对应的某些值。函数应确定,对于e组,有必要添加“名称”键3和4的值,并给出结果
词典e_dict示例:
{'one': {'u_mean': 4.25, 'c_mean': 4.25}, 'three': {'u_mean': 4.5, 'c_mean': 4.5}, 'two': {'u_mean': 4.583333333333334, 'c_mean': 4.583333333333334}, 'four': {'u_mean': 4.5625, 'c_mean': 4.5625}, 'five': {'u_mean': 4.65, 'c_mean': 4.65}}
结果应该是这样的:
{'e': {'u_mean': 4.531, 'c_mean': 4.531}, 'q': {'u_mean': 4.49443, 'c_mean': 4.49443}}
也就是说,这些字段都是u_平均值,找到它们的平均值,并将它们相加
我的函数的完整代码:
def group_names():
st, c_clus, n_names = [], [], []
for h in Utilizations.objects.values('clu', 'name', 'a', 'b'):
st.append((h.get('clu'), h.get('name'), h.get('a'), h.get('b')))
c_clus.append(h.get('clu'))
n_names.append(h.get('name'))
"""получение названий"""
names, clus = [], []
for nam in n_names:
if nam not in names:
names.append(nam)
for cl in c_clus:
if cl not in clus:
clus.append(cl)
clu, e = {}, {}
u_load, u_max = {}, {}
mean_all, u_load_mean, u_max_mean = 0, 0, 0
for nam in names:
hs = Utilizations.objects.filter(name=nam)
o, p = 0, 0
for h in hs:
o += h.a
p += h.b
u_load[nam] = o / 2 + 1
u_max[nam] = p / 2 + 1
u_max_mean = mean(u_max.values())
u_load_mean = mean(u_load.values())
mean_all = (u_max_mean + u_load_mean) / 2
e[nam] = {'u_mean': mean_all, 'c_mean': mean_all}
for cl in clus:
for nam in names:
s = Utilizations.objects.filter(name=nam, clu=cl)
for h in hs:
clu[nam] = cl
return clu
结果是以这种形式分组:{'1':'q','2':'q','5':'q','3':'e','4':'e'}
我不知道下一步该怎么办
您可以使用pandas进行以下操作:
输入:
代码:
输出:
解释:
Pandas
允许以表格形式处理数据,类似于示例中显示的数据。 第一个表(DataFrame)是df,第二个表是包含查找值(e_dict)但经过位预处理(转置和重命名列)的表然后我们根据两个表的名称值合并这两个表,以便在第一个表中有相应的u_mean和c_mean值
现在,我们用
clue
值对值进行分组,并用mean
值对值进行聚合最后,我们将该表作为字典返回
我不知道原始数据是如何存储的(我不知道“Utilizations.objects.values”),但下面的代码将根据简单的列表计算这些平均值:
输出:
相关问题 更多 >
编程相关推荐