Я хочу вычислить расширяющееся окно только нескольких последних элементов в группе ...
df = pd.DataFrame({'B': [np.nan, np.nan, 1, 1, 2, 2, 1,1], 'A': [1, 2, 1, 2, 1, 2,1,2]})
df.groupby("A")["B"].expanding().quantile(0.5)
это дает:
1 0 NaN
2 1.0
4 1.5
6 1.0
2 1 NaN
3 1.0
5 1.5
7 1.0
Я только очень хочупоследние две строки для каждой группы. результат должен быть:
1 4 1.5
6 1.0
2 5 1.5
7 1.0
Я могу легко все это вычислить, а затем просто получить нужные мне разделы.но это очень медленно, если мой фрейм данных имеет длину 1000 с, и я не хочу пролистывать все окно ... только последние два "броска"
РЕДАКТИРОВАТЬ: я изменил название;Многие люди правильно отвечают на часть вопроса, но игнорируют то, что является IMO важной частью (я должен был быть более ясным). Проблема в том, сколько времени нужно.Я мог бы просто «хвост» ответ, чтобы получить последние два;но затем он включает в себя вычисление первых двух «расширяющихся окон», а затем отбрасывает эти результаты.Если вместо этого мой фрейм данных имел длину 1000 строк, а мне просто нужно было ответить на несколько последних записей, большая часть этих вычислений была бы напрасной тратой времени.Это главная проблема, которая у меня есть.Как я уже сказал: «Я могу легко все это вычислить, а затем просто получить нужные разделы» => с помощью tail.Извините за путаницу.Также потенциальное использование tail не предполагает вычисление лота, но все равно кажется, что это происходит из-за времени, которое я сделал ... возможно, это не правильно, это предположение, которое я сделал.
EDIT2: другой вариант, который я пробовал, использовал min_windows при переходе, чтобы заставить его не вычислять начальные разделы группы, но это имеет много ловушек, таких как: -если массив содержит NaN, это не работает, -ifgroupbys не имеют одинаковую длину.
EDIT3: как более простая проблема и обоснование: я думаю, это ограничение расширяющегося / или скользящего окна ... скажем, у нас был массив [1,2,3,4,5] расширяющимися окнами являются [1], [1,2], [1,2,3], [1,2,3,4], [1,2,3,4,5], и еслимы запускаем максимальное значение, которое получаем: 1,2,3,4,5 (максимум каждого массива).Но если я просто хочу максимум двух последних расширяющихся окон.Мне просто нужно max [1,2,3,4] = 4 и max [1,2,3,4,5].Интуитивно понятно, что для получения двух последних результатов мне не нужно вычислять максимум из первых трех результатов расширяющегося окна.Но реализация Pandas может заключаться в том, что она вычисляет max [1,2,3,4] как max [max [1,2,3], max [4]] = 4, и в этом случае необходим расчет всего окна.Это может быть то же самое для квантильного примера.Однако может быть альтернативный способ сделать это без использования расширения ... не уверен ... это то, что я не могу решить.