我有两个使用astropy.table.Table
的表,并且具有一个ID列,用于唯一标识每行。但是,这些行不一定都以相同的顺序排列。
表1:
astropy.table.Table
表2:
ID | A
----|---------
123 | 1.38e11
456 | 5.31e8
789 | 1.92e10
我想创建一个包含三列的表:ID,A和B。
合并结果:
ID | B
----|----
123 | 42
789 | 13
456 | 70
我可以在表中添加列
ID | A | B
----|---------|----
123 | 1.38e11 | 42
456 | 5.31e8 | 70
789 | 1.92e10 | 13
但是,值必须以正确的顺序排列。
如何合并这些表?
table1['B'] = [42, 70, 13]
假设两个表中的from astropy.table import Table
id = [123, 456, 789]
a = [1.38e11, 5.31e8, 1.92e10]
table1 = Table([id, a], names=('ID', 'A'), meta={'name': 'first table'})
id = [123, 789, 456]
b = [42, 70, 13]
table2 = Table([id, b], names=('ID', 'B'), meta={'name': 'second table'})
merged_table = ?
相同(只是顺序不同),首先将两个表转换为ndarray,然后对它们进行转置,以使表中的列不成为数组中的行
ID
然后按其第一列对其进行排序
import numpy as np
array1 = np.array([table1['ID'], table1['A']]).T
array2 = np.array([table2['ID'], table2['B']]).T
合并两者的新表
sorted1 = array1[array1[:,0].argsort()]
sorted2 = array2[array2[:,0].argsort()]