Фильтрация кадра данных временного ряда для каждого дня - PullRequest
0 голосов
/ 04 августа 2020

У меня большой временной ряд dataframe (pandas) с индексом datetime. Я пытаюсь отфильтровать это dataframe на основе среднего значения одного столбца за каждый день. Однако, когда я это делаю, я получаю следующую ошибку:

ValueError: можно сравнивать только объекты Series с идентичной маркировкой

Вот код, который у меня есть на данный момент:

def filter(Data,Variation):

   Mean = Data['column1'].resample('d').mean().dropna()

   Min = Mean * (1 - Variation)
   Max = Mean * (1 + Variation)

   Data = Data[Data['column1'] > Min]
   Data = Data[Data['column1'] < Max]

   return Data

Думаю, я знаю, что идет не так ('Min' и 'Data' имеют разные размеры, т.е. их индексы не совпадают), но я не знаю, как это исправить.

Есть идеи?

Спасибо.

1 Ответ

0 голосов
/ 04 августа 2020

После повторной выборки DataFrame немного сложнее (но не невозможно) выровнять этот результат (ваш «Mean») с исходными данными.

Вместо этого рассмотрите возможность использования groupby, вот так:

# example DataFrame
df = pd.DataFrame(
    index=pd.date_range('2020-08-01', freq='3H', periods=20, name='date'),
    data=dict(
        x=np.random.normal(size=20),
        y=np.random.normal(size=20),
    ))

def f(g, var):
    mean = g.mean()
    return (mean * (1 - var) < g) & (g < mean * (1 + var))

selx = df.groupby(pd.Grouper(freq='d')).x.apply(f, var=3.0)

df.loc[selx]

Примечание: selx - это просто bool таймсерии; вы можете использовать его для выбора целых строк в соответствии с последней строкой выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...