#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')
.