Группировка строк по времени и функция сравнения строк в Pandas

#pandas #dataframe #apply #rolling-computation

#pandas #фрейм данных #применить #скользящее вычисление

Вопрос:

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

 import datetime
import pandas as pd

data = {
    'timestamp': [
        datetime.datetime(2020,10,10,12,0,0),
        datetime.datetime(2020,10,10,12,0,2),
        datetime.datetime(2020,10,10,12,0,10),
        datetime.datetime(2020,10,10,12,0,12),
        datetime.datetime(2020,10,10,12,0,30),
        datetime.datetime(2020,10,10,12,1,0),
        datetime.datetime(2020,10,10,12,3,0),
        datetime.datetime(2020,10,10,12,3,10),
        datetime.datetime(2020,10,10,12,3,40),
        datetime.datetime(2020,10,10,12,10,0)
        ],
    'row_number': [i for i in range(10)],
    'input': [
        'hello',
        'hello w',
        'hello wor',
        'this is a',
        'hello world',
        'this is a new',
        'hello',
        'hello w',
        'hello wor',
        'hello world'

        ]
}

pd.DataFrame(data=data)
  

Этот фрейм данных необходимо группировать по разделам на основе разницы в 60 секунд или менее между одной из предыдущих строк и разницей в строковых символах 4 или менее, чтобы строки были разделены на группы, как показано ниже. На данный момент я отформатировал строки как отдельные фреймы данных, но в идеале это были бы списки списков, которые будут загружены в BigQuery.

 data = {
    'timestamp': [
        datetime.datetime(2020,10,10,12,0,0),
        datetime.datetime(2020,10,10,12,0,2),
        datetime.datetime(2020,10,10,12,0,10),
        datetime.datetime(2020,10,10,12,0,30)
        ],
    'row_number': [0,1,2,4],
    'input': [
        'hello',
        'hello w',
        'hello wor',
        'hello world'
        ]
}
pd.DataFrame(data=data)

data = {
    'timestamp': [
        datetime.datetime(2020,10,10,12,0,12),
        datetime.datetime(2020,10,10,12,1,0)
        ],
    'row_number': [3,5],
    'input': [
        'this is a',
        'this is a new',
        ]
}

pd.DataFrame(data=data)

data = {
    'timestamp': [
        datetime.datetime(2020,10,10,12,3,0),
        datetime.datetime(2020,10,10,12,3,10),
        datetime.datetime(2020,10,10,12,3,40),
        datetime.datetime(2020,10,10,12,10,0)
        ],
    'row_number': [6,7,8,9],
    'input': [
        'hello',
        'hello w',
        'hello wor',
        'hello world'
        ]
}
pd.DataFrame(data=data)
  

У меня уже есть функция сравнения строк, но я не уверен, как применить это к функции скользящего окна pandas с помощью apply, или это самый эффективный способ сделать это.

 df.rolling('60s').apply()
  

В настоящее время я использую список словарей для сравнения, но это занимает слишком много времени, чтобы перебирать все сравнения, когда количество строк составляет ~ 100 тыс. и есть много групп только с одной строкой.

Комментарии:

1. df.rolling('60s') .