gpt4 book ai didi

python - 按二维数组中的特定行标识符对列求和

转载 作者:行者123 更新时间:2023-12-01 05:10:06 31 4
gpt4 key购买 nike

我正在尝试创建一个函数,如果每行中的第一项与另一项匹配,则该函数将 2D 数组最后 12 列的值相加。每行的第一个元素代表部门 ID 号,因此我需要每个部门的员工每月工作的累计小时数。我的二维数组是一个列表列表,数据示例如下所示:

[[12606.0, 74204.0, 56.0, 64.0, 72.0, 21.6, 18.0, 0.0, 0.0], 
[12606.0, 105492.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 45.6],
[12606.0, 112151.0, 2.4, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[12606.0, 121896.0, 0.0, 0.0, 0.0, 0.0, 0.0, 60.8, 0.0]]

我的代码如下:

   def costcentersum(A):
"""Finds the sum of the monthly hours worked by employees in each cost center.
"""
for i in range(len(A)):
if A[i-1][0] == A[i][0]:
A[i][2:] += A[i-1][2:]
print A[i]

我的输出虽然很奇怪,但不是正确的答案。我得到了这个:

[12606.0, 121896.0, 0.0, 0.0, 0.0, 0.0, 0.0, 60.8, 0.0, 0.0, 0.0, 8.0, 15.2, 18.4, 2.4, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 45.6, 32.0, 54.4, 52.0, 56.0, 43.2, 56.0, 64.0, 72.0, 21.6, 18.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

我希望我的输出不包含数据的第二列(员工 ID)。只需简单的部门 ID 和每个月的累计小时数即可。我的代码哪里出错了?谢谢你的帮助!

最佳答案

线路

A[i][2:] += A[i-1][2:]

不会将所有列单独添加到上面的行,而是添加列表[1, 2] + [3, 4] == [1, 2, 3, 4]。这就是为什么你的输出看起来这么长。

你的函数实际上并没有返回任何有用的东西,它只是打印最后一行(只有最后一行,因为print是在 for 循环之外)。此外,您的代码不会尝试考虑文件中不连续的成本中心。

更好的结构是字典,其中键是成本中心 ID,值是第一列是该成本中心的所有行的最后十二列的总和。

def cost_center_sum(arr):
out = {}
for row in arr:
cc = int(row[0])
if cc not in out:
out[cc] = [0] * 12
out[cc] = list(map(sum, zip(out[cc], row[2:]))) # add by column
return out

突出显示的行实际上负责逐列求和。

示例输入的输出:

{12606: [58.4, 68.0, 72.0, 21.6, 18.0, 60.8, 45.6]}

关于python - 按二维数组中的特定行标识符对列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375075/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com