Объединить две таблицы астропии - PullRequest
0 голосов
/ 08 октября 2019

У меня есть две таблицы, использующие astropy.table.Table, со столбцом идентификатора, который уникально идентифицирует каждую строку. Тем не менее, строки не обязательно все в том же порядке.

Таблица 1:

 ID | A
----|---------
123 | 1.38e11
456 | 5.31e8
789 | 1.92e10

Таблица 2:

 ID | B
----|----
123 | 42
789 | 13
456 | 70

Я хотел бы создать таблицу с тремя столбцами: ID, A и B.

Результат слияния:

 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 = ?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Таблицы Astropy поддерживают полный набор операций, подобных базам данных, включая слияние, группирование, укладку и т. Д. Погуглив «слияние таблиц астропии», вы получите:

https://docs.astropy.org/en/stable/table/operations.html

Так что в вашем случае просто выполните:

 from astropy.table import join
 merged_table = join(table1, table2, keys='ID')
0 голосов
/ 09 октября 2019

Предполагая, что ID одинаковы в обеих таблицах (только не в одном и том же порядке), сначала преобразуйте обе таблицы в ndarrays и транспонируйте их так, чтобы столбцы в таблице не становились строками в массиве

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()]

Создайте новую таблицу, объединяющую два

merged_table = Table([sorted1[:, 0], sorted1[:, 1], sorted2[:, 1]],
                     names=('ID', 'A', 'B'), meta={'name': 'merged table'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...