Самый эффективный способ в Pandas назначать кортежи для сегментов - PullRequest
0 голосов
/ 17 декабря 2018

Я написал следующий фрагмент кода, который присваивает кортежи сегментам.Сегмент - это контейнер кортежей, охватывающий определенный интервал времени.В отличие от кортежа, который имеет только 1 метку времени.

Однако, поскольку мой код содержит ~ 30 000 кортежей, и этот шаг повторяется довольно часто, он тратит много времени на этот метод.

Есть ли более эффективный способ справиться с этим?

for timestamp, tuple in tuples.iterrows():
    this_seg = [s for s in segments if s.can_have(timestamp)]
    assert(len(this_seg) <= 1)
    for s in this_seg:
        s.append(tuple)
return segments

Вот еще один контекст:

A сегмент является классом типа Segment и имеет конструктор следующим образом:

def __init__(self, ts_max, ts_min):
            self._df = pd.DataFrame({})
            self._ts_max = ts_max
            self._ts_min = ts_min

Метод can_have проверяет, может ли данная временная метка быть частью сегмента: т.е. временная метка лежит между ts_min и ts_max.

Tuples - это фрейм данных Pandas, который имеет временные метки в качестве индексов инекоторые другие функции в виде столбцов.

1 Ответ

0 голосов
/ 17 декабря 2018

Итерроу - самый медленный способ делать вещи в Пандах.Из вашего вопроса не ясно, что вы пытаетесь сделать, но этот урок предлагает несколько более быстрых замен для iterrows.

https://realpython.com/fast-flexible-pandas/

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