Поиск интервалов равных значений в n временных рядах - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь найти временные интервалы (например, 1 минута), где все кадры данных содержат одинаковое значение (например, 1).

Дано n временных рядов (df1, df2, df3, ...), которые могут иметь разные отметки времени. Временные ряды имеют дискретные значения состояний 0 и 1. Из этих функций перехода я хочу получить одну серию, где значения никогда не должны быть> 1. Я думаю о суммировании всех кадров и применении max (x, 1).

import pandas as pd

df1 = pd.DataFrame({'2018-01-01 00:00:00': [1],
                    '2018-01-01 00:01:00': [0],
                    '2018-01-01 00:03:00': [0],
                    '2018-01-01 00:04:00': [1]})

df2 = pd.DataFrame({'2018-01-01 00:00:00': [0],
                    '2018-01-01 00:01:30': [1],
                    '2018-01-01 00:03:00': [0],
                    '2018-01-01 00:04:30': [1]})

df3 = pd.DataFrame({'2018-01-01 00:00:00': [1],
                    '2018-01-01 00:01:15': [1],
                    '2018-01-01 00:03:00': [0],
                    '2018-01-01 00:04:45': [0]})

frames = [df1, df2, df3]
result = pd.concat(frames)

print(df1.add(df2.add(df3,axis="index",fill_value=0),axis="index",fill_value=0))

Промежуточный результат:

[3 rows x 8 columns]
   2018-01-01 00:00:00  2018-01-01 00:01:00  2018-01-01 00:01:15  ...  2018-01-01 00:04:00  2018-01-01 00:04:30  2018-01-01 00:04:45
0                    2                  0.0                  1.0  ...                  1.0                  1.0                  0.0

Я думаю, что есть более удобный и интуитивно понятный способ (concat,объединить, присоединиться ...), чтобы сделать это. Я бы разделил мою проблему на:

  1. получить больше знаний в пандах:)
  2. добавить / суммировать кадры данных / временные ряды
  3. пусть значения 0 или 1
  4. оценка продолжительности смены интервалов

1 Ответ

0 голосов
/ 16 октября 2019

IIUC, вы можете просто использовать max:

pd.concat([df1,df2,df3], sort=False).max()

Или, если хотите выровнять кадры данных по индексу:

pd.concat([df1,df2,df3], sort=False).groupby(level=0).max()

Вывод:

   2018-01-01 00:00:00  2018-01-01 00:01:00  2018-01-01 00:03:00  \
0                    1                  0.0                    0   
...