嗨所以我正在使用这个2D数组,格式化为列表列表(这里是一个未格式化的小样本):
[[10017.0, 93454.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.6, 0.0], [10024.0, 39374.0, 12.8, 28.8, 24.0, 9.829, 28.8, 62.4, 26.4, 30.4, 18.8, 4.0, 20.0, 16.0], [10024.0, 62807.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 38.0, 25.6, 70.4], [10024.0, 81405.0, 11.2, 12.0, 13.6, 7.2, 46.8, 25.6, 22.4, 8.0, 3.2, 12.0, 16.0, 27.2], [10026.0, 2964.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.717, 9.867, 11.683, 0.0, 5.417, 14.316], [10026.0, 29100.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.608, 1.531, 3.136], [10026.0, 39461.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 0.0, 2.4, 0.0], [10026.0, 42209.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.8, 8.0, 2.4]
...
格式化版本如下所示:
12230.000 116815.000 17.200 8.000 10.000 9.000 6.000 11.600 6.000
12230.000 132820.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
12366.000 93769.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
12366.000 93961.000 6.400 20.000 0.000 0.000 12.000 4.000 16.000
12369.000 40256.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
12369.000 48122.000 37.600 43.200 48.000 45.600 52.000 53.600 40.000
12379.000 22775.000 0.000 0.000 0.000 0.000 0.000 0.000 37.983
(为了格式化目的,删除了一些列)。 该数组在第一列显示部门ID,在第二列显示员工ID,每个月显示12列,表示每个员工工作的小时数。
我需要设计一个查看每个员工行的函数,并计算每个部门中所有员工的累计工时。在示例数据的情况下,我将有一行Dep ID。 12230,12366,12369和12379,然后是每月12列。我希望这个函数也能输出2D数组中的数据,该数组与列表列表的格式相同。我在下面的功能是,它确实找到了每个部门每个月的累计工时。但是,它不显示部门ID,它只将数据打印为单个列表。关于如何修改我的代码的任何输入将不胜感激!
def cost_center_sum (A):
dep_list = []
for row in range(0,len(A)):
dep_list.append(A[row][0])
myList = sorted(set(dep_list))
for i in range(0,len(myList)):
sum_list = []
for col in range(2, len(A[0])):
sum = 0
for row in range(0, len(A)):
if myList[i]==A[row][0]:
sum = sum + A[row][col]
sum_list.append(sum)
print sum_list
答案 0 :(得分:1)
尝试类似:
NUMBER_OF_MONTHS = 12
def collapse(A):
dep = dict()
for row in A:
if row[0] not in dep:
dep[row[0]] = [0.0 for x in xrange(NUMBER_OF_MONTHS)]
for i in xrange(NUMBER_OF_MONTHS):
dep[row[0]][i] += row[i+2]
ret = list()
for department in dep:
x = [department]
x.extend(dep[department])
ret.append(x)
return ret
使用测试数据运行它,输出为:
[10024.0, 24.0, 40.8, 37.6, 17.029, 75.6, 88.0, 48.8, 38.4, 22.0, 54.0, 61.6, 113.60000000000001]
[10017.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.6, 0.0]
[10026.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.717, 9.867, 27.683, 18.408, 17.348, 19.852]]
答案 1 :(得分:0)
hours = [sum(data_row[2:]) for data_row in data]
抱歉,我第一次误解了,如果你想按第1列聚合,请获取这样的唯一值:
dep_ids = set(row[0] for row in data)
接下来用每个id初始化字典:
agg_data = dict(id: [0] * 12 for id in dep_ids)
现在您可以按ID运行数据并汇总:
from operator import add
for row in data:
key = row[0]
agg_data[key] = map(add, agg_data[key], row[2:])