2015-09-22 2 views
0

я имею первую таблицу с исходными данными, с помощью всего два колонками time и temperature:группы заказных периодов времени

      time temperature 
40953 2015-01-01 12:00:00.493000  88.75951 
40954 2015-01-01 12:01:00.494000  88.76033 
40955 2015-01-01 12:02:00.495000  88.75979 
40956 2015-01-01 12:03:00.480000  88.75938 
40957 2015-01-01 12:04:00.496000  88.75944 
40958 2015-01-01 12:05:00.497000  88.76046 
40959 2015-01-01 12:06:00.560000  88.76008 
40960 2015-01-01 12:07:00.498000  88.75940 
40961 2015-01-01 12:08:00.484000  88.75938 
40962 2015-01-01 12:09:00.484000  88.75933 
... 

то у меня есть вторая таблица с периодами приема данных.

     start    stop 
run           
248523 2015-01-05 16:13:09 2015-01-05 17:42:17 
248529 2015-01-05 17:47:03 2015-01-05 18:29:27 
248530 2015-01-05 18:30:24 2015-01-05 18:33:24 
248531 2015-01-05 18:39:31 2015-01-05 18:40:31 
248532 2015-01-05 18:43:57 2015-01-06 09:00:17 
... 

Как вы можете видеть, прогоны не смежны: многие измерения температуры не принадлежат ни одному прогону. Гораздо больше данных, чем периодов.

Что мне нужно сделать, так это вычислить среднюю температуру для каждого прогона, усредняя все измерения температуры, относящиеся к пробегу. Я предполагаю, что первый шаг - присоединиться к двум таблицам, но я не могу выразить предикат «time между start и stop». Предложения?

ответ

0

Если я правильно понял, был получен аналогичный вопрос о нерегулярных временных интервалах here.

Существует медленный метод с замкнутым циклом и более быстрым методом с использованием np.searchsorted. В вашем случае, я полагаю, вам понадобится одна дополнительная категория interval_id для выборок, которые не соответствуют ни одному временному интервалу. Это работает?

+0

Да, это похоже, но на самом деле я не уверен, что мне нужно объединить две таблицы. Мне нужно только среднее. Я не забочусь о измерениях, которые не вписываются ни в какой интервал –

+0

После того, как вы отметили каждую строку первой таблицы с помощью параметра interval_id, вы можете вычислить среднее значение для каждого бина следующим образом: df.groupby (' interval_id '). mean() (думаю, было бы неплохо сначала удалить любые строки, которые не вписываются ни в какой промежуток времени.) – DalekSec

+0

уверен, но это не кажется мне оптимальным решением , Например, теперь я делаю обратное: я перебираю таблицу периодов, и каждый период я ​​нахожу данные, которые соответствуют, и я накапливаю данные для вычисления среднего значения. Присоединение не требуется. –

Смежные вопросы