合并两个天文表

问题描述 投票:0回答:1

我有两个使用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]
astropy
1个回答
0
投票

假设两个表中的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()]
© www.soinside.com 2019 - 2024. All rights reserved.