我有两个包含数据的表(实际列表列表),我想以编程方式在两者之间进行自然连接(没有SQL - 仅在代码中)。
如果我只想加入Index [0]的单个公共列,我可以这样做:
for each row1 in table1:
for each row2 in tabl2:
if row1[0] == row2[0]: // then this needs to join
newRow = row1 + row2 // pseudo-code but essentially add the two rows together
首先 - 这有意义吗?
第二 - 这是一个自然的联接(对最终结果没有100%的信心)
第三 - 是更好的方法吗?
答案 0 :(得分:1)
您可以使用astropy
库来操作表格。您阅读了两个表,然后使用hstack
将两个具有相同行数的表连接在一起。
from astropy.table import Table, hstack
from astropy.io import ascii
table1 = ascii.read("table1.dat")
table2 = ascii.read("table2.dat")
print hstack([table1, table2], join_type='inner')
答案 1 :(得分:1)
是的,这很有意义
是的,如果index [0]是唯一的公共列,这是一个自然连接。但是,您应该像下面那样创建newRow
,因此索引不会在行中重复:
newRow = row1 + row2[1:]
当前时间复杂度为O(n ^ 2)。如果使用散列,可以在O(n)时间复杂度下执行此操作,但在这种情况下,散列的O(n)会增加空间复杂度
hash = {}
for idx, row1 in enumerate(table1):
hash[row1[0]] = idx #save the index of row by the key value
for row2 in table2:
if hash.has_key(row2[0])
newRow = table1[hash[row2[0]]] + row2[1:]