Я новичок в Python и панд и может реально использовать некоторую помощь на этом ..Pandas/Python: Как совместить строки из двух фреймов данных на основе близких, но не равных значений?
Background- Я пытаюсь извлечь unsynchronised измерения двойного допплер от сканирования LiDAR
, который принимает PPI сканирования. У меня есть данные (из MySQL), загружаемые в dataframes pandas, и теперь вам нужно применить некоторую функцию соответствия, где строки сопоставляются, если время измерения находится в пределах некоторого предела (время < 8 с.).
Вот пример того, что содержится в dataframes: https://gist.github.com/anonymous/b0cc61b461c9e2d8f7bf
Колонка dt_stop
(от LabView
) измеряется в секундах и то, что я хочу, чтобы соответствовать на основе.
Итак, в этом примере строка 0 из df1
не будет соответствовать, так как между ней и любой строкой содержится df2
.
Строка 1 из df1
будет соответствовать ряду 0 из df2
, так как они находятся всего на 0,5 секунды друг от друга.
Я хотел бы, чтобы все совпадения были объединены по горизонтали, чтобы я мог выполнять мои вычисления по одной и той же строке.
Надеюсь, это имеет смысл. Любая помощь очень ценится!
Вот мой текущий код: https://gist.github.com/anonymous/6dee303f4f8260600fdd
Это похоже на условие «join», которое намного лучше выражено в базе данных до загрузки в Pandas. Если у вас есть это в MySQL, просто выполните соединение, основанное на условии, которое вы хотите напрямую, например 'select * from table1, join table2 b на ABS (a.dt_stop - b.dt_stop) <= 8' - или используйте причудливое datetime функционирует по мере необходимости. После этого поворот в так называемом многократном совпадении станет проще в Pandas. – ely
Эй, спасибо за предложение! Я попытался сделать это в начале, но не смог заставить его работать правильно. Это два запроса, которые я использую для получения данных для каждого сканера. Все это хранится на 4 отдельных таблицах. https://gist.github.com/anonymous/360e1adb94332c4e627e – Elliot
Спасибо Господин F! Я понял это и разместил решение SQL ниже. – Elliot