Как убрать медленный цикл в Python и использовать вместо него лямбду или что-то еще - PullRequest
0 голосов
/ 08 февраля 2019

Замените цикл на лямбду или что-то еще, чтобы увеличить скорость бега.

У меня есть цикл, который работает, но для моего реального набора данных он будет слишком медленным. У меня в основном огромный текстовый файл, каждыйстрока, разделенная символами \ n.

В начале каждого уникального сообщения имеется характерный отпечаток сообщения, для целей которого, скажем, они начинаются с #.Я поместил вхождение этого # (Y) или нет (N) в отдельный столбец, называемый «Начало»

Я хочу искать строки, которые не начинаются с #, и если строканиже также не начинается с # Я хочу объединить два.Не обращайте внимания на любое желание урезать \ ns в данный момент, у меня все в порядке.

Мой цикл работает, но как я могу сделать это, используя лямбда-функцию или любой другой способ получить хорошую скорость?

Огромное спасибо заранее

for i in range(2,(len(df)-1)):
    if ((df['Beginning'][i] == 'N') and (df['Beginning'][i+1] == 'N')):
        df['Message'][i] = df['Message'][i]  +  df['Message'][i+1]
        df['Message'][i+1] = ""

Попытка редактирования добавить пример:

Сообщение начинается сейчас 01: 01: 2018: 12: 15:28 \ n

текстовое сообщение бла бла \ n

подробности о местонахождении проблемы \ n

сведения о другом месте \ n

Message-begin-сейчас 01: 01: 2018: 12: 16: 78 \ n

бла бла тип текстового сообщения 2 что-то xxxxxx \ n

Сообщение начинается сейчас 01: 01: 2018: 12: 21: 05 \ n

бла бла тип текстового сообщения 3 что-то xxxxxx \ n

подробности местоположения для этой вещи \ n

подробности местоположения для этой вещи \ n

подробности цены для меня \ n

подробности цены для вас \ n

лоты \ n

больше \ n

скучно \ n

текст \ n

Сообщение начинается сейчас 01: 01: 2018: 12: 35: 01 \ n

bla bla текстовое сообщение типа 2 что-то xxxxxx \ n

Итак, выше приведено 4 разных сообщения разной длины, и я хочу объединить текст, чтобы у меня была одна строка на сообщение, содержащая всю информацию от началадо конца

1 Ответ

0 голосов
/ 08 февраля 2019

Я думаю, что вы ищете df.shift()

например, вы можете заменить итерацию и оператор if на что-то вроде этого:

df[(df['Beginning'] == df['Beginning'].shift(1)) & (df['Beginning'] == 'N')]

или (что я бы на самом деле сделал)

mask = (df['Beginning'] == df['Beginning'].shift(1)) & (df['Beginning'] == 'N')

df.loc[mask, 'Message'] = df.loc[mask, 'Message'] + df.loc[mask, 'Message'].shift(1)  # you'd have to check that this is what you want, perhaps you need to shift the mask rather than the df, i'm not sure

edit: упс, опечатки

edit 2 - ваш вопрос изменился, я не уверен, что это будет полезно для вас.

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