Я работаю с наборами сейсмических данных, где N землетрясений регистрируются M сейсмическими станциями. Существует информация о землетрясении (идентификатор землетрясения, магнитуда и т. д.) и информация о конкретной станции (идентификатор станции, частота дискретизации приборов и т. д.). Не все сейсмические станции записывают все землетрясения, поэтому существует разное количество станций, записывающих каждое землетрясение.
В настоящее время я организую эти данные в объекте Pandas DataFrame, по одной строке на каждое землетрясение. Поскольку для каждого землетрясения существует разное количество станций, я сохраняю идентификаторы станций в виде числового массива. Вот простой пример: землетрясения 0001 и 0002 магнитудой 2,1 и 3,1 соответственно. Четыре сейсмические станции: a, b, c и d имеют частоту дискретизации 100, 100, 60 и 60 соответственно.
Код: Выделить всё
import numpy as np
import pandas as pd
events = {
'event_id': ['0001', '0002'],
'mag': [2.1, 3.1],
'station_ids': [np.array(['a', 'c']), np.array(['a', 'b', 'c', 'd'])],
'station_sampling_rate': [np.array([100, 60]), np.array([100, 100, 60, 60])]
}
events = pd.DataFrame(events)
print(events)
Код: Выделить всё
event_id mag station_ids station_sampling_rate
0 0001 2.1 [a, c] [100, 60]
1 0002 3.1 [a, b, c, d] [100, 100, 60, 60]
- Пройти по каждому строку событий, выполнить некоторую проверку и сравнить с существующим каталогом станций (медленно)
- Создать события таким образом, чтобы они содержали все больше станций -конкретная информация для каждой станции (становится очень большим) и по-прежнему перебирает каждую строку событий
Код: Выделить всё
events
Желаемая структура приведенного выше примера такова:
Код: Выделить всё
station_id sampling_rate event_ids mag
0 a 100 [0001, 0002] [2.1, 3.1]
1 b 100 [0002] [3.1]
2 c 60 [0001, 0002] [2.1, 3.1]
3 d 60 [0002] [3.1]
Я попробовал выполнить поиск, но не знаю, как называется эта структура данных и есть ли у нее имя.
Подробнее здесь: https://stackoverflow.com/questions/786 ... fficient-w