如果A列重复,则汇总第2列

时间:2015-11-18 12:42:55

标签: python python-2.7

我有两列,如果A列重复,我想要对B列的值求和。

A = {1 2 3 3 4 4 4}
B = {1 2 3 4 5 6 7}

结果应该如下:

A    B
1    1
2    2
3    7
4    18

我的代码:

 for i in range(len(a)):
 r= np.sqrt(((x-x[j])**2)+((y-y[j])**2)))
  if r <= A[i] <= r-5:
        B=np.abs((r-0.007)-b[i])

3 个答案:

答案 0 :(得分:0)

A1 = [1, 2, 3, 3, 4, 4, 4]
B1 = [1, 2, 3, 4, 5, 6, 7]
A2 = []
B2 = []

for i in range(len(A1)):
    if A1[i] != A1[i + 1]:
        A2.append(A1[i])
        B2.append(B1[i])
    else:
        j = i + 1
        sum = B1[i]
        while j < len(A1) and A1[i] == A1[j]:
            sum += B1[j]
            del A1[j]
            del B1[j]
        A2.append(A1[i])
        B2.append(sum)
        if j >= len(A1):
            break

print A2
print B2

输出是:

[1,2,3,4]

[1,2,7,18]

答案 1 :(得分:0)

我认为最简单的方法是使用以下算法:

def create_buckets(l):
    return [0]*(max(l)+1)

def fill_buckets(A, B):
    buckets = create_buckets(A)
    for i in range(len(A)):
        buckets[A[i]] += B[i]
    return buckets

A = [1, 2, 3, 3, 4, 4, 4]
B = [1, 2, 3, 4, 5, 6, 7]
output = fill_buckets(A, B)
for i in range(len(output)):
    if output[i] != 0:
        print(i, output[i])
  • 我们列出一个零的列表。它的长度等于A + 1的最大值。 (这样,我们将A的每个值作为列表中的索引)这些是桶。
  • 我们循环A.假设我们在循环中的索引Y上得到值X:

    •我们使用相同的索引(Y)检查列表B上的值

    •我们在索引X(索引Y上的A值)上将该值添加到存储桶中

  • 我们打印不为零的桶的每个值(或者如果要允许零,则可以创建另一个默认值)。

答案 2 :(得分:0)

我认为这是最简单的解决方案。

A1 = [1,2,3,3,4,4,4]

B1 = [1,2,3,4,5,6,7] A2 = []

B2 = []

A2.append(A1 [0])

B2.append(B1 [0])

表示范围内的i(len(A1)-1):

if A1[i] != A1[i+1]:
    A2.append(A1[i+1])
    B2.append(B1[i+1])  
else:
    A2.pop()
    A2.append(A1[i+1])
    b = B2.pop()
    B2.append(b+B1[i+1])

打印A2

打印B2

输出:     A2 = [1,2,3,4]     B2 = [1,2,7,18]