Python 查找员工数据二维数组和部门数据二维数组之间的差距
嘿,伙计们,我使用的数据集有14列(部门ID、员工ID和一年中的月份),显示每个员工每月工作的小时数 我正在使用的职能部门需要为记录了某个月零值的员工打印行,而他/她的部门(作为一个整体)记录了非零值(即市场营销部门的John记录了5月份的零小时,当时部门总计为500小时,所以我们打印John的行) 我有两个助手函数:Python 查找员工数据二维数组和部门数据二维数组之间的差距,python,arrays,Python,Arrays,嘿,伙计们,我使用的数据集有14列(部门ID、员工ID和一年中的月份),显示每个员工每月工作的小时数 我正在使用的职能部门需要为记录了某个月零值的员工打印行,而他/她的部门(作为一个整体)记录了非零值(即市场营销部门的John记录了5月份的零小时,当时部门总计为500小时,所以我们打印John的行) 我有两个助手函数:cost\u center\u sum(A),它接收2D数据数组(组织为列表列表),并将每个部门的累积小时数作为列表查找。第二个帮助函数,compcols(row,A),将“row
cost\u center\u sum(A)
,它接收2D数据数组(组织为列表列表),并将每个部门的累积小时数作为列表查找。第二个帮助函数,compcols(row,A)
,将“row”的部门ID与数据集A中的相应行相匹配,并检查特定月份“row”中的零值是否对应于A中匹配行中相同月份的零值
我尝试将这两个函数编译成函数,findgaps(A)
,该函数为记录了一个月零值的员工打印员工信息,该部门记录了一个非零值
下面是我上面描述的功能的代码:
def compcols(row, A):
for i in range(len(A)):
if len(A[i]) < len(row):
print row, (" - beware : line %d len(A[i]) %d < len(row) %d"
%(i, len(A[i]), len(row)))
else:
if row[0]==A[i][0]:
for j in range(len(row)):
if row[j]==0 and A[i][j]!=0:
print row
break
NUMBER_OF_MONTHS = 12
def cost_center_sum(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 sorted(dep.iterkeys()):
x = [department]
x.extend(dep[department])
ret.append(x)
return ret
def findgaps(A):
X=cost_center_sum(A)
for i in range(len(A)):
for j in range(len(A[0])):
if A[i][j] < 0.00001:
return compcols(A[i],X)
findgaps
将只返回一次;第一次调用compcols
后,函数结束:
def findgaps(A):
X=cost_center_sum(A)
for i in range(len(A)):
for j in range(len(A[0])):
if A[i][j] < 0.00001:
return compcols(A[i],X) # only ever returns once
def findgaps(A):
X=cost_center_sum(A)
for i in range(len(A)):
for j in range(len(A[0])):
if A[i][j] < 0.00001:
return compcols(A[i],X) # only ever returns once
def findgaps(A):
X = cost_center_sum(A)
for row in A:
if any(month < 0.00001 for month in row[2:]):
yield compcols(row, X)
def compcols(row, X):
for dept_row in X:
if row[0] == dept_row[0]:
for emp_month, dep_month in zip(row[2:], dept_row[2:])
if emp_month == 0 and dep_month != 0:
return row
else:
print "No match for department {0}.".format(row[0])