make two tables having same orders in both column and row names

P

Ping-Hsun Hsieh

Hi,

I would like to compare values in two table with same column and row names, but with different orders in column and row names.
For example, table_A in a file looks like the follows:
AA100 AA109 AA101 AA103 AA102
BB1 2 9 2.3 1 28
BB3 12 9 2.3 1 28
BB9 0.5 2 2.3 1 28
BB2 2 9 21 1 20

Table_B in the other file looks like the follows:
AA101 AA109 AA100 AA103 AA102
BB1 2 9 2.3 2 28
BB2 2 9 2.3 1 28
BB9 2 9 2.3 1 28
BB3 2 2 2 1 28

Can anyone give an efficient way to make the two tables having same orders in column and row names so I can easily and correctly compare the values in positions?

Thanks,
PingHsun
 
J

Jon Clements

Hi,

I would like to compare values in two table with same column and row names, but with different orders in column and row names.
For example, table_A in a file looks like the follows:
AA100   AA109   AA101   AA103   AA102
BB1     2       9       2.3     1       28
BB3     12      9       2.3     1       28
BB9     0.5     2       2.3     1       28
BB2     2       9       21      1       20

Table_B in the other file looks like the follows:
AA101   AA109   AA100   AA103   AA102
BB1     2       9       2.3     2       28
BB2     2       9       2.3     1       28
BB9     2       9       2.3     1       28
BB3     2       2       2       1       28

Can anyone give an efficient way to make the two tables having same orders in column and row names so I can easily and correctly compare the values in positions?

Thanks,
PingHsun

Use a dictionary with a tuple of the row 'name' and column 'name' as
the key.

The following was put together in a hurry, so take with a pinch of
salt (and brandy or something :))...

t1data = """AA100 AA109 AA101 AA103 AA102
BB1 2 9 2.3 1 28
BB3 12 9 2.3 1 28
BB9 0.5 2 2.3 1 28
BB2 2 9 21 1 20"""


def create_table(what):
from itertools import imap, islice, izip, cycle, repeat
table = filter(None, imap(str.split, what.split('\n')))
table_dict = {}
for cols in islice(table, 1, None):
for row_name, col_name, col in izip(cycle(table[0]), repeat
(cols[0]), islice(cols, 1, None)):
table_dict[(row_name, col_name)] = col
return table_dict


print create_table(t1data)


hth
Jon.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,439
Members
44,829
Latest member
PIXThurman

Latest Threads

Top