Python:我如何在行和列上的值之间创build一个对应matrix?

我需要写在Excel中,我需要知道组和名称之间的对应关系在哪里写'X',所以我需要一个结构在哪里保持组名和核心列和行

n1 – 在第1行n2 – 在第2行

A(组名) – 列B(组名) – 列3 – C列4 D – 列5

我必须在matrix中设置用户和组之间的对应关系,并写入excel。 工作数据:

Groups = A,B,C, D,E, F ... Name = N1,N2,N3,N4 ..... N1 => A, C,D, F N2= B,C,D N3= A, E, F 

预期的结果是:

  ABCDEF N1 xxxx N2 xxx N3 xxx N1, N2, N3 - are on rows A,B, c,D - are on columns 

我需要写在Excel中,我需要知道组和名称之间的对应关系在哪里写'X',所以我需要一个结构在哪里保持组名和核心列和行

 N1 - is on row 1 N2 - is on row 2 A(group name) - is on column 2 B(group name) - is on column 3 C is on column 4 D is on column 5 

例:

 for N1 I need to write on (row1,col2), (row1,column4), (row1,column5), (row1,column7) for N2 I need to write on (row2,col3), (row2,column4), (row2,column5) for N3 I need to write on (row3,col2), (row1,column3), (row1,column6), (row1,column7) 

我从一个db / csv文件中为每个用户逐个接收数据。 我不知道开始时的所有组,我只是在检查之后在列上添加了独特的组,而不是为以前的用户添加的。

如果一个组是新的,还没有出现,我将添加一个新的组名列。 如果存在,我检查列上的组的位置,并在行中写入x。

我尝试使用2个列表或2个字典,但行I上的通信无法正确设置。

 for a in b ..... if group_name not in groups_pos.items(): groups_pos[col_pos] = group_name name_group[row_pos] = group_name col_pos += 1 row_pos += 1 ...... for col, value in groups_pos.items(): sheet.cell(row=1, column=2+col).value = value for row, value_p in groups_pos.items(): sheet.cell(row=row, column=2+col).value = 'x'` 

由于使用了库,上下游代码或期望的实现没有讨论,这里是一个纯粹的Python实现

 groups = ['A','C','D','F','B','C','D','A','E','F'] # ... names = ['N1','N1','N1','N1','N2','N2','N2','N3','N3','N3'] # ... row_names, col_names, data_table = [], [], [[]] # for loop used to simulate getting data one at a time for name, group in zip(names, groups): # see if that name exists in table if name in row_names: row = row_names.index(name) else: row_names.append(name) row = len(row_names)-1 # add new row of empty strings data_table.append(['' for _ in xrange(len(data_table[0]))]) # see if that group exists in table if group in col_names: col = col_names.index(group) else: col_names.append(group) col = len(col_names)-1 # add empty string to every column for i,r in enumerate(data_table): data_table[i].append('') # add to table data_table[row][col] = 'x' # display print 'Table:' print ' ', ' '.join(col_names) for rowname, row in zip(row_names, data_table): print rowname, ' '.join([' ' if x == '' else x for x in row]) 

产量

 table: ACDFBE N1 xxxx N2 xxx N3 xxx 

一旦所有的数据都在data_table ,那么执行excel写入,idk是什么lib被导入…所以这部分是未经testing的:

 # add col headings for c, col_name in enumerate(col_names): sheet.cell(row=1, column=c+2).value = col_name for r, row in enumerate(data_tables): # add row heading on first column sheet.cell(row=r+2, column=1).value = row_names[r] # add each column to row for c, col in enumerate(row): sheet.cell(row=r+2, column=c+2).value = data_table[r][c] 

或者你可以使用像pandas这样的图书馆! 如果你已经安装了或者可以安装,2D数据pipe理就容易得多。