У меня есть набор данных с примерно 100K + строками, один столбец в этом наборе данных является столбцом Datetime, назовем его A
.
Мой набор данных отсортирован по столбцу A.
Iхочу "заполнить пробелы" моего набора данных, то есть: если у меня есть эти две строки, следующие друг за другом:
0 2019-03-13 08:12:20
1 2019-03-13 08:12:25
Я хочу добавить пропущенные секунды между ними, в результате у меня будет это:
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
Я не хочу создавать строки между двумя строками, если у них разные дни, месяц или год.
Так что, если у них есть две последовательные строки:
0 2019-03-13 08:12:20
1 2019-03-15 08:12:21
Я не буду ничего добавлять.
Я не могу также генерировать строки, если разница во времени между моими двумястрок больше, чем 2 часа.
Так что, если у вас есть эти две последовательные строки:
0 2019-03-13 08:12:20
1 2019-03-15 11:12:21
Я не буду ничего добавлять.
Вот пример, иллюстрирующий то, что яхочу:
df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-13 08:12:25", "2019-03-20 08:17:23", "2019-03-22 08:17:25", "2019-03-22 11:12:20", "2019-03-22 11:12:23", "2019-03-24 12:33:23"]})
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:25
2 2019-03-20 08:17:23
3 2019-03-22 08:17:25
4 2019-03-22 11:12:20
5 2019-03-22 11:12:23
6 2019-03-24 12:33:23
В конце я хочу получить такой результат:
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
6 2019-03-20 08:17:23
7 2019-03-22 08:17:25
8 2019-03-22 11:12:20
9 2019-03-22 11:12:21
10 2019-03-22 11:12:22
11 2019-03-22 11:12:23
12 2019-03-24 12:33:23
Я пытался с этим:
импорт панд как pd
df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-13 08:12:25", "2019-03-20 08:17:23", "2019-03-22 08:17:25", "2019-03-22 11:12:20", "2019-03-22 11:12:23", "2019-03-24 12:33:23"]})
df['A']=pd.to_datetime(df['A'])
fill = [pd.date_range(df.iloc[i]['A'], df.iloc[i+1]['A'], freq='S') for i in range(len(df)-1) if (df.iloc[i+1]['A']-df.iloc[i]['A']).total_seconds()<=7200]
dates = [item for sublist in fill for item in sublist]
df=df.set_index('A').join(pd.DataFrame(index=pd.Index(dates, name='A')), how='outer').reset_index()
print(df)
Работает, но медленно, есть ли более быстрый способ сделать это?