Как разделить Pandas DataFrame на подмассивы (подробно описан конкретный вариант использования)?

Прошу прощения за заголовок, но я недостаточно знаю, чтобы правильно сжать свой вопрос в одну строку.

Вот вариант использования:

  • У меня есть pd.DataFrame с произвольными значениями индекса и столбцом «отметка времени».
  • У меня есть упорядоченный список значений меток времени.
  • Я хочу разбить DataFrame на куски со значениями «отметка времени», которые:
    1. меньше List[0] (наименьшее значение в списке)
    2. между каждыми последовательными временными метками в списке (включая меньшее значение, исключая большее значение)
    3. больше или равно List[-1] (наибольшее значение в списке)

Я уже сделал список фреймов данных, разделив оригинал на фрагменты с помощью оператора While. Однако я чувствую, что это неэффективно, и должен быть способ использовать np.split() или df.groupby() вместе со списком временных меток, чтобы сделать это более элегантно и эффективно. Опять же, я могу ошибаться.

Итак, я предполагаю, что мой вопрос сводится к следующему: «Каков наиболее эффективный по времени метод с наиболее элегантной презентацией для достижения целей, указанных выше»?

@KU99 Упомянутый пример и вывод:

дф =

колАcolBотметка времени
Первыйряд1
Второйряд2
Первыйряд3
Второйряд4
Первыйряд5
Второйряд6
Первыйряд7
Второйряд8
Первыйряд9
Второйряд10
Первыйряд11
Второйряд12

Список = [3, 7, 8, 9]

выход =

колАcolBотметка времени
Первыйряд1
Второйряд2
колАcolBотметка времени
Первыйряд3
Второйряд4
Первыйряд5
Второйряд6
колАcolBотметка времени
Первыйряд7
колАcolBотметка времени
Второйряд8
колАcolBотметка времени
Первыйряд9
Второйряд10
Первыйряд11
Второйряд12

Тип вывода будет зависеть от метода, но мне все равно, будет ли это список, словарь или какой-либо другой индексируемый тип.

Вам нужно предоставить пример и вывод

onyambu 22.04.2022 21:19
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
1
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте pd.cut + .groupby:

bins = [3, 7, 8, 9]

for _, g in df.groupby(
    pd.cut(df.timestamp, [float("-inf")] + bins + [float("+inf")], right=False)
):
    print(g)
    print("-" * 80)

Отпечатки:

     colA colB  timestamp
0   First  row          1
1  Second  row          2
--------------------------------------------------------------------------------
     colA colB  timestamp
2   First  row          3
3  Second  row          4
4   First  row          5
5  Second  row          6
--------------------------------------------------------------------------------
    colA colB  timestamp
6  First  row          7
--------------------------------------------------------------------------------
     colA colB  timestamp
7  Second  row          8
--------------------------------------------------------------------------------
      colA colB  timestamp
8    First  row          9
9   Second  row         10
10   First  row         11
11  Second  row         12
--------------------------------------------------------------------------------

Похоже, что pd.cut() + df.groupby() было именно тем решением, на которое я надеялся. Спасибо за ответ на мой вопрос! (Я бы проголосовал за вас, но у меня пока нет репутации)

1liis 22.04.2022 23:46

Другие вопросы по теме