如何在python中执行group-by

2024-04-18 22:35:51 发布

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

我试图在python中找到某些数字的平均值

例如:

A={('A','B',1):1,('A','B',2):4,('A1','B1',2):5,('A1','B1',1):6}

A是字典,我的输出应该是

B={('A','B'):1+4/2,('A1','B1'):11/2)}

我通过使用一些FOR循环和IF条件得到了逻辑,但是它太耗时了。你知道吗

谁能告诉我一个更快的方法得到输出。 我的逻辑

    for i in A:
            # lis.append(i)
             lis.append((i, A[i]))
             for j in lis:
                if (j[0][0], j[0][1]) not in pro_loc_comb:
                    pro_loc_comb.append((j[0][0], j[0][1]))


B= {}
print pro_loc_comb
for x in pro_loc_comb:
    a = 0
    count = 0
    for j in lis:
        if (x[0] == j[0][0]):
            if (x[1] == j[0][1]):
                count = count + 1
                a = (a + j[1])
    B[(x[0], x[1])] = a / float(count)
print B

提前谢谢


Tags: inforifa1count数字逻辑loc
1条回答
网友
1楼 · 发布于 2024-04-18 22:35:51

因为您没有包含解决方案,所以我使用了以下方法:

from __future__ import division
A={('A','B',1):1,('A','B',2):4,('A1','B1',2):5,('A1','B1',1):6}
B={}
C={}
for x in A:
    val= A[x]
    y,z,n=x
    if (y,z) in B:
        B[(y,z)]+=val
        C[(y,z)]+=1
    else:
        B[(y,z)]=val
        C[(y,z)]=1
for x in B:
    B[x]=B[x]/C[x]

相关问题 更多 >