LINUX.ORG.RU

сджойинить датафреймы по приблизительно одинаковым временным меткам

 , ,


0

1

Как сджойнить df1 и df2 с точностью 1 минута? Нужно, чтобы близкие с точностью до 1 минуты временные метки совпадали.

df1 = pd.DataFrame(
    {'type': ['x', 'y', 'z']},
    index=pd.to_datetime(['2021-01-21 11:00:00.001', '2021-01-21 12:12:00.999',  '2021-01-21 13:13:01.888']))
df1.index.name='date1'
df1.reset_index()

df2 = pd.DataFrame(
    {'value': [10, 15, 12]},
    index=pd.to_datetime(['2021-01-21 10:59:59.999', '2021-01-21 12:12:00.999',  '2021-01-21 13:13:02.001']))
df2.index.name='date2'
df2.reset_index()

P.S. попытка с resample('1h') не удалась, т.к. метку 2021-01-21 10:59:59.999 относит к 10 часам, а не к 11

выкрутился путем округления индексов round(‘1h’)

P.S. дискуссию на эту тему хотел бы оставить

scisearcher
() автор топика

Написать функцию, которая возвращает True если время между строками баз примерно одинаковое, сделать объединение таблиц по результату функции.

mxfm ★★
()

близкие с точностью до 1 минуты временные метки

А что делать, если на одну строку из df1 в df2 найдётся больше одной строки, подходящей под это условие?

Это не в том смысле, что Ваш вопрос глупый, но когда мне приходилось решать похожую задачу (найти области на сетке, подходящие под заданные значения с учётом доверительного интервала), это всплыло.

anonymous
()
Ответ на: комментарий от anonymous

я планирую подбирать epsilon в ходе эксперимента, взять не минуту а 30 секунд …

scisearcher
() автор топика

Постановка не очень понятна.

Если надо обьединитьь несколько записей попадающих внутрь окна заданной ширины это одно, если округлить время с точностью до минут это другое.

По первому варианту постановки тоже есть варианты

AntonI ★★★★
()
Ответ на: комментарий от scisearcher

взять окно 1 минута — это мое первое предположение на вскидку, приходится подбирать эксперементально окно … не точно все это в итоге )

scisearcher
() автор топика
Ответ на: комментарий от scisearcher

Я такое делал. В итоге я объединял записи разделенные интервалом меньшим чем dt. Скажем если dt 2 минуты и есть 10 записей с интервалом минута, то они сливаются в одну запись.

Округления времени тут очевидно не работают.

AntonI ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.