Python Pandas: найти шаблон в DataFrame - PullRequest
0 голосов
/ 06 октября 2018

У меня есть следующий Dataframe (1,2 миллионы строк):

df_test_2 = pd.DataFrame({"A":["end","beginn","end","end","beginn","beginn","end","end","end","beginn","end"],"B":[1,10,50,60,70,80,90,100,110,111,112]})`

Теперь я пытаюсь найти последовательности.Каждое «начало» должно соответствовать первому «концу», где расстояние, основанное на столбце В, составляет не менее 40.Для предоставленного кадра данных это будет означать: enter image description here

Проблема заключается в том, что Ваша помощь высоко ценится.

1 Ответ

0 голосов
/ 06 октября 2018

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

import pandas as pd
from collections import namedtuple
df_test_2 = pd.DataFrame({"A":["end","beginn","end","end","beginn","beginn","end","end","end","beginn","end"],"B":[1,10,50,60,70,80,90,100,110,111,112]})

sequence_list = []
Sequence = namedtuple('Sequence', ['beginn', 'end'])

beginn_flag = False
beginn_value = 0
for i, row in df_test_2.iterrows():
    state = row['A']
    value = row['B']

    if not beginn_flag and state == 'beginn':
        beginn_flag = True
        beginn_value = value 
    elif beginn_flag and state == 'end':
        if value >= beginn_value + 40:
            new_seq = Sequence(beginn_value, value)
            sequence_list.append(new_seq)
            beginn_flag = False

 print(sequence_list)

Этот код выдает следующее:

[Sequence(beginn=10, end=50), Sequence(beginn=70, end=110)]

Две последовательности, одна из которых начинается в 10 и заканчивается в 50, а другая начинается в 70 и заканчивается в 110.

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