Pandas Q-cut: объединение данных с использованием подхода с расширяющимся окном - PullRequest
1 голос
/ 11 марта 2020

Этот вопрос чем-то похож на вопрос 2018 , который я нашел на идентичной теме c.

Я надеюсь, что, если я попрошу об этом более простым способом, кто-то сможет найти простое решение проблемы, с которой я сейчас сталкиваюсь:

У меня есть датафрейм timeseries «df», который примерно имеет следующую структуру:

            V_1   V_2  V_3  V_4
1/1/2000    17    77   15   88
1/2/2000    85    78    6   59
1/3/2000    31    9    49   16
1/4/2000    81    55   28   33
1/5/2000    8     82   82   4
1/6/2000    89    87   57   62
1/7/2000    50    60   54   49
1/8/2000    65    84   29   26
1/9/2000    12    57   53   84
1/10/2000   6     27   70   56
1/11/2000   61    6    38   38
1/12/2000   22    8    82   58
1/13/2000   17    86   65   42
1/14/2000   9     27   42   86
1/15/2000   63    78   18   35
1/16/2000   73    13   51   61
1/17/2000   70    64   75   83

Если бы я хотел использовать все столбцы для получения ежедневных квантилей, я бы использовал следующий подход:

quantiles =  df.apply(lambda x: pd.qcut(x, 5, duplicates='drop', labels=False), axis=0)

Выходные данные выглядит так:

           V_1  V_2 V_3 V_4
2000-01-01  1   3   0   4
2000-01-02  4   3   0   3
2000-01-03  2   0   2   0
2000-01-04  4   1   0   0
2000-01-05  0   4   4   0
2000-01-06  4   4   3   3
2000-01-07  2   2   3   2
2000-01-08  3   4   1   0
2000-01-09  0   2   2   4
2000-01-10  0   1   4   2
2000-01-11  2   0   1   1
2000-01-12  1   0   4   2
2000-01-13  1   4   3   1
2000-01-14  0   1   1   4
2000-01-15  3   3   0   1
2000-01-16  4   0   2   3
2000-01-17  3   2   4   4

Что я хочу сделать:

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

Например:

  • Для расчета бинов за 2 января 2000 года я хотел бы просто использовать наблюдения за 1 и 2 января 2000 года; и ничего после дат;
  • Для расчета бинов на 3 января 2000 года я хотел бы просто использовать наблюдения от 1, 2 и 3 января 2000 года; и ничего после дат;
  • Для расчета бинов на 4 января 2000 года я хотел бы просто использовать наблюдения от 1, 2, 3 и 4 января 2000 года; и ничего после дат;
  • Для расчета бинов на 5 января 2000 года я хотел бы просто использовать наблюдения от 1, 2, 3, 4 и 5 января 2000 г .; и ничего после дат;

Иначе говоря, я хотел бы использовать этот подход для вычисления бинов для ВСЕХ точек данных в "df". То есть, чтобы вычислить ячейки с 1 января 2000 года по 17 января 2000 года.

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

Этот блок кода ниже неправильный, но он точно иллюстрирует то, что я пытаюсь выполнить sh:

quantiles =  df.expanding().apply(lambda x: pd.qcut(x, 5, duplicates='drop', labels=False), axis=0)

У кого-нибудь есть идеи, как это сделать проще? чем это

1 Ответ

1 голос
/ 11 марта 2020

Я новичок, поэтому возьмите это с крошкой соли, но, если разбить, я считаю, что ваш вопрос дубликат, потому что он требует простой нарезки указателя даты и времени ЗДЕСЬ .

lt_jan_5 = df.loc[:'2000-01-05'].apply(lambda x: pd.qcut(x, 5, duplicates='drop', labels=False), axis=0)

print(lt_jan_5)

            V_1  V_2  V_3  V_4
2000-01-01    1    2    1    4
2000-01-02    4    3    0    3
2000-01-03    2    0    3    1
2000-01-04    3    1    2    2
2000-01-05    0    4    4    0

Надеюсь, это полезно

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