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理就容易得多。