Этот вопрос чем-то похож на вопрос 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)
У кого-нибудь есть идеи, как это сделать проще? чем это