Pandas – группировка внутридневных расписаний по дате

У меня есть внутридневная серия журнальных возвратов за несколько дней, которые я хотел бы уменьшить до ежедневного ohlc. Я могу сделать что-то вроде

hi = series.resample('B', how=lambda x: np.max(np.cumsum())) low = series.resample('B', how=lambda x: np.min(np.cumsum())) 

Но для каждого вызова кажется неэффективным вычислять cumsum. Есть ли способ сначала вычислить cumsums, а затем применить «ohcl» к данным?

 1999-08-09 12:30:00-04:00 -0.000486 1999-08-09 12:31:00-04:00 -0.000606 1999-08-09 12:32:00-04:00 -0.000120 1999-08-09 12:33:00-04:00 -0.000037 1999-08-09 12:34:00-04:00 -0.000337 1999-08-09 12:35:00-04:00 0.000100 1999-08-09 12:36:00-04:00 0.000219 1999-08-09 12:37:00-04:00 0.000285 1999-08-09 12:38:00-04:00 -0.000981 1999-08-09 12:39:00-04:00 -0.000487 1999-08-09 12:40:00-04:00 0.000476 1999-08-09 12:41:00-04:00 0.000362 1999-08-09 12:42:00-04:00 -0.000038 1999-08-09 12:43:00-04:00 -0.000310 1999-08-09 12:44:00-04:00 -0.000337 ... 1999-09-28 06:45:00-04:00 0.000000 1999-09-28 06:46:00-04:00 0.000000 1999-09-28 06:47:00-04:00 0.000000 1999-09-28 06:48:00-04:00 0.000102 1999-09-28 06:49:00-04:00 -0.000068 1999-09-28 06:50:00-04:00 0.000136 1999-09-28 06:51:00-04:00 0.000566 1999-09-28 06:52:00-04:00 0.000469 1999-09-28 06:53:00-04:00 0.000000 1999-09-28 06:54:00-04:00 0.000000 1999-09-28 06:55:00-04:00 0.000000 1999-09-28 06:56:00-04:00 0.000000 1999-09-28 06:57:00-04:00 0.000000 1999-09-28 06:58:00-04:00 0.000000 1999-09-28 06:59:00-04:00 0.000000 

2 Solutions collect form web for “Pandas – группировка внутридневных расписаний по дате”

 df.groupby([df.index.year, df.index.month, df.index.day]).transform(np.cumsum).resample('B', how='ohlc') 

Я думаю, что это может быть то, что я хочу, но я должен проверить.

EDIT: После ответа zelazny7:

 df.groupby(pd.TimeGrouper('D')).transform(np.cumsum).resample('D', how='ohlc') 

работает и также более эффективен, чем мое предыдущее решение.

Я не смог заставить ваше предложение пересмотреть работу. Вам повезло? Вот способ агрегирования данных на уровне бизнес-дня и вычисления статистики OHLC за один проход:

 from io import BytesIO from pandas import * text = """1999-08-09 12:30:00-04:00 -0.000486 1999-08-09 12:31:00-04:00 -0.000606 1999-08-09 12:32:00-04:00 -0.000120 1999-08-09 12:33:00-04:00 -0.000037 1999-08-09 12:34:00-04:00 -0.000337 1999-08-09 12:35:00-04:00 0.000100 1999-08-09 12:36:00-04:00 0.000219 1999-08-09 12:37:00-04:00 0.000285 1999-08-09 12:38:00-04:00 -0.000981 1999-08-09 12:39:00-04:00 -0.000487 1999-08-09 12:40:00-04:00 0.000476 1999-08-09 12:41:00-04:00 0.000362 1999-08-09 12:42:00-04:00 -0.000038 1999-08-09 12:43:00-04:00 -0.000310 1999-08-09 12:44:00-04:00 -0.000337""" df = read_csv(BytesIO(text), sep='\s+', parse_dates=[[0,1]], index_col=[0], header=None) 

Здесь я создаю словарь словарей. Внешний ключ ссылается на столбцы, к которым вы хотите применить функции. Внутренний ключ содержит имена ваших функций агрегации, а внутренние значения – это функции, которые вы хотите применить:

 f = {2: {'O':'first', 'H':'max', 'L':'min', 'C':'last'}} df.groupby(TimeGrouper(freq='B')).agg(f) Out: 2 HCLO 1999-08-09 0.000476 -0.000337 -0.000981 -0.000486 
  • Pandas reindex и заполнить отсутствующие значения: «Индекс должен быть монотонным»
  • Как поставить легенду вне сюжета с пандами
  • Вставка строк в результате операции groupby в исходный фрейм данных
  • Кажется, что окно прокатки Pandas представляет смещение для свернутых данных
  • Переиндексируйте фреймворк с повторяющимися значениями индекса
  • Сравнение строк в таблице оракула и сопоставление обновлений
  • Преобразовать процентную строку в float в pandas read_csv
  • panda dataframe удалить постоянный столбец
  • pandas dataframe, выбирающий индексы nan
  • Как оценить, сколько памяти потребуется DataFrame Pandas?
  • Оптимизация scipy.optimize.fmin_bfgs дает отличный результат от простого вызова функции
  •  
    Interesting Posts for Van-Lav

    Ключевой порядок в словарях Python

    python: почему os.makedirs вызывают WindowsError?

    csv.write пропускает строки при записи в csv

    Как умножить двумерный массив numpy с массивом numpy 1D?

    Быстрая матричная транспозиция в Python

    Регулярное выражение Python для int с не менее 4-мя цифрами

    Как отправить SIGINT на Python из сценария bash?

    Пропустить указанное количество столбцов с ошибкой numpy.genfromtxt () python 3.4

    Индекс за пределами диапазона при использовании лямбда

    Как адаптировать или изменить размер прямоугольника внутри объекта, не включая (или с несколькими числами) фоновых пикселей?

    Как обрабатывать конфиденциальную конфигурационную информацию при развертывании приложений для приложений?

    Сжатие UTF-8 (или другого 8-битного кодирования) до 7 или менее бит

    Не удалось получить сообщения gmail из любой папки, кроме папки «Входящие» (проблема Python3)

    Каково использование numpy.random.seed () Разве это имеет значение?

    Почему эта функция выражения генератора медленнее, чем версия цикла?

    Python - лучший язык программирования в мире.