Настройка и переиндексация фрейма данных индекса времени дрейфа - PullRequest
1 голос
/ 11 марта 2020

У меня есть набор данных со средним интервалом в 22xx секунды между записями, в то время как средний интервал составляет 21 секунду.

Я пытался использовать DatetimeIndex. floor / ceil / round функций (с частотой 20/21/22 секунды), но это приводит к дублированию индексов, и мне необходимо впоследствии объединить кадр данных с другим, поэтому дублированные индексы должны быть избегать. Удаление дублированных индексов также приводит к значительной потере данных.

Я хочу, чтобы в кадре данных использовался равноудаленный интервал времени, предпочтительно округленный до 00/20/40 секунд.

Несколько строк выборки данных показаны ниже.

2018-05-06 18:02:24    1.15e+07
2018-05-06 18:02:45    1.35e+07
2018-05-06 18:03:05    1.08e+07
...
2018-05-06 18:08:30    1.11e+07
2018-05-06 18:08:50    1.20e+07
2018-05-06 18:09:10    1.30e+07
...

Что при обработке должно возвращать следующее.

2018-05-06 18:02:20    1.15e+07
2018-05-06 18:02:40    1.35e+07
2018-05-06 18:03:00    1.08e+07
...
2018-05-06 18:08:20    1.11e+07
2018-05-06 18:08:40    1.20e+07
2018-05-06 18:09:00    1.30e+07
...

Округление приводит к дублированию индексов, в то время как floor и ceil также вызывают дублирование индексы.

Любые предложения о том, как настроить дрейф, не теряя слишком много данных?

Спасибо.

1 Ответ

2 голосов
/ 11 марта 2020

Для меня работает DatetimeIndex.round на 20S в течение 20 секунд:

df.index = df.index.round('20S')
print (df)
                            col
2018-05-06 18:02:20  11500000.0
2018-05-06 18:02:40  13500000.0
2018-05-06 18:03:00  10800000.0
2018-05-06 18:08:40  11100000.0
2018-05-06 18:08:40  12000000.0
2018-05-06 18:09:20  13000000.0

Другая идея заключается в использовании DataFrame.resample - это создает DatetimeIndex с последовательными значениями:

df = df.resample('20S').mean() 
print (df)

                            col
2018-05-06 18:02:20  11500000.0
2018-05-06 18:02:40  13500000.0
2018-05-06 18:03:00  10800000.0
2018-05-06 18:03:20         NaN
2018-05-06 18:03:40         NaN
2018-05-06 18:04:00         NaN
2018-05-06 18:04:20         NaN
2018-05-06 18:04:40         NaN
2018-05-06 18:05:00         NaN
2018-05-06 18:05:20         NaN
2018-05-06 18:05:40         NaN
2018-05-06 18:06:00         NaN
2018-05-06 18:06:20         NaN
2018-05-06 18:06:40         NaN
2018-05-06 18:07:00         NaN
2018-05-06 18:07:20         NaN
2018-05-06 18:07:40         NaN
2018-05-06 18:08:00         NaN
2018-05-06 18:08:20  11100000.0
2018-05-06 18:08:40  12000000.0
2018-05-06 18:09:00  13000000.0

Тогда возможно удалить эти значения:

df = df.resample('20S').mean().dropna(how='all') 
print (df)
                            col
2018-05-06 18:02:20  11500000.0
2018-05-06 18:02:40  13500000.0
2018-05-06 18:03:00  10800000.0
2018-05-06 18:08:20  11100000.0
2018-05-06 18:08:40  12000000.0
2018-05-06 18:09:00  13000000.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...