Описание: У меня есть кадр данных Pandas, образованный тремя столбцами: широта [-90; 90], долгота [-180; 180] и направление [0; 360]. Все столбцы в градусах.
Индекс вместо этого формируется по дате + времени следующим образом:
df = pd.DataFrame({'lat':[87,90,85,10,-40,-85,-89,-40],
'lon':[-150,-178,176,100,10,1,-20,-100],
'dir':[180,200,356,4,20,1,351,20]},
index = pd.to_datetime(['2019-06-17 08:29:07','2019-06-17 08:29:11', '2019-06-17 08:29:16', '2019-06-17 08:29:25', '2019-06-17 08:29:33', '2019-06-17 08:29:40', '2019-06-17 08:29:48', '2019-06-17 08:29:57']))
Вот как это выглядит:
lat lon dir
2019-06-17 08:29:07 87 -150 180
2019-06-17 08:29:11 90 -178 200
2019-06-17 08:29:16 85 176 356
2019-06-17 08:29:25 10 100 4
2019-06-17 08:29:33 -40 10 20
2019-06-17 08:29:40 -85 1 1
2019-06-17 08:29:48 -89 -20 351
2019-06-17 08:29:57 -40 -100 20
ЦЕЛЬ: Моя цель состоит в том, чтобы добавить отсутствующие значения времени между индексами и выполнить интерполяцию (ex linear) между отсутствующими координатами и углами. Я смог добавить отсутствующие даты, например, так:
idx = pd.to_datetime(pd.date_range(df.index[0], df.index[-1], freq='s').strftime('%Y-%m-%d %H:%M:%S'))
df = df.reindex(idx, fill_value='NaN')
lat lon dir
2019-06-17 08:29:07 87 -150 180
2019-06-17 08:29:08 NaN NaN NaN
2019-06-17 08:29:09 NaN NaN NaN
2019-06-17 08:29:10 NaN NaN NaN
2019-06-17 08:29:11 90 -178 200
2019-06-17 08:29:12 NaN NaN NaN
2019-06-17 08:29:13 NaN NaN NaN
................... ... ... ...
2019-06-17 08:29:55 NaN NaN NaN
2019-06-17 08:29:56 NaN NaN NaN
2019-06-17 08:29:57 -40 -100 20
Чтобы достичь своей цели, я безуспешно пытался использовать функцию панд pandas.Series.interpolate
, поскольку она не учитывает угол «скачков» между -180; 180 для долготы и «скачок» между 360 и 0. для направления.
ВОПРОС: Не могли бы вы предоставить умный и элегантный способ добиться такой интерполяции, чтобы он учитывал эти скачки между пределами их диапазона?
Примечание: здесь есть пример, чтобы быть более ясным (интерполяция между -176 и 176): -176, -177, -178, -179, -180 / 180,179,178,177,176?