Как использовать Pandas для разделения данных CSV с метками времени на несколько CSV на основе значений и непрерывных периодов времени - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь проанализировать данные АИС корабля. У меня есть CSV с ~ 20 000 строк, со столбцами для широты / долготы / скорости / метки времени.

Я загрузил данные в pandas фрейм данных в блокнот Jupyter.

То, что я хочу сделать, это разделить CSV на меньшие CSV на основе отметки времени и скорости, поэтому я хочу, чтобы отдельный CSV для каждого периода времени скорость судна была меньше, чем, скажем, 2 узла, например, если судно проходило в 10 узлов в течение 6 часов, затем замедлился до 1 узла в течение 3 часов, снова увеличил скорость до 10 узлов, затем снова замедлился до 1 узла в течение 4 часов, я хотел бы, чтобы выходной сигнал составлял два CSV, один для 3-часовой период и один на 4-часовой период. Это позволяет мне просматривать эти периоды индивидуально в моем картографическом программном обеспечении.

Я могу легко отфильтровать данные, чтобы показать все периоды, когда они <1 узел, но я не могу разбить их для вывода непрерывных периодов как отдельные CSV / кадры данных. <strong>РЕДАКТИРОВАТЬ

Вот пример данных

Я попытался показать более четко, чего я хочу достичь здесь

1 Ответ

0 голосов
/ 30 апреля 2020

Вот кое-что для начала.

Сначала отфильтруйте все значения, которые соответствуют критериям (например, ниже 2):

df = pd.DataFrame({'speed':[2,1,4,5,4,1,1,1,3,4,5,6], 'time':[4,5,6,7,8,9,10,11,12,13,14,15]})
df_below2 = df[df['speed']<=2].reset_index(drop=True)

Теперь нам нужно разделить кадр если есть слишком большой разрыв между значениями во времени. Например:

threshold = 2
df_below2['not_continuous']  = df_below2['time'].diff() > threshold

Distin guish между группами с использованием cums:

df_below2['group_id'] = df_below2['not_continuous'].cumsum()

Отсюда должно быть легко разделить кадр на основе идентификатора группы.

...