WedX - журнал о программировании и компьютерных науках

Повторная выборка или переиндексация двух столбцов данных с разной частотой

У меня есть кадр данных, который содержит столбец метки времени и два столбца данных (data1 и data2).

Столбец data1 охватывает всю метку времени, а столбец data2 останавливается примерно на полпути. Когда я собирал свои данные, data1 и data2 собирали данные за одно и то же время, но с разной частотой.

Я хотел бы, чтобы столбец data2 понимал, что мне следует склоняться к функциям resample или reindex, но я не уверен, как это сделать. Столбец «Моя метка времени» — это объект, а два моих столбца данных — float64 типов.

Как мне проще всего достичь этой цели?

Я попытался обратиться к следующему вопросу, но у меня возникли проблемы с его реализацией: PANDAS — перебрать два индекса даты и времени с разными размерами для сравнения дней и значений

введите здесь описание изображения

20.07.2017

  • Пожалуйста, опубликуйте образец вашего фрейма данных и желаемый результат для потенциальных ответчиков, чтобы визуализировать вашу проблему. 20.07.2017
  • Значит, времена соответствуют высокочастотным данным? И ваши низкочастотные данные в настоящее время не связаны с правильной отметкой времени? (кроме 0) 20.07.2017
  • @ GeoMatt22 Правильно - мой data1 соответствует метке времени в моем .csv, а data2 - нет. Я хотел бы, чтобы data2 охватывал длину data1. 20.07.2017
  • @GeoMatt22 data2 сэмплируется с частотой 10 Гц, а data1 сэмплируется с частотой 500 Гц. 20.07.2017
  • ХОРОШО. Перед любой передискретизацией вам сначала необходимо зарегистрировать данные 10 Гц (т.е. найти текущие данные во времени). Поэтому вам нужно разделить data2 на отдельный фрейм данных, а затем назначить соответствующий индекс (примечание: это не pd.DataFrame.reindex). 20.07.2017
  • Есть ли способ заполнить расширение data2 по всему индексу data1 и просто заполнить все, что находится между ними, с помощью NaN? 20.07.2017
  • Можете ли вы сделать df['data2_new'] = np.NaN, а затем df.loc[::50, 'data2_new'] = df[:len(df)//50, 'data2'] (где 50 = 500 Гц/10 Гц)? 20.07.2017

Ответы:


1

Вот что, я думаю, вы пытаетесь сделать. Я предполагаю, что ваши временные метки выровнены по некоторому множителю. В моем примере я использовал каждые 2 минуты, так как ваш пример выглядит именно так. Вот мой пример кадра данных:

df
                        a     b
DATE
2017-05-29 06:30:00   0.0   0.0
2017-05-29 06:31:00   9.0  24.0
2017-05-29 06:32:00  10.0   1.0
2017-05-29 06:33:00  10.0   1.0
2017-05-29 06:34:00   0.0   7.0
2017-05-29 06:35:00   3.0   3.0
2017-05-29 06:36:00   0.0   4.0
2017-05-29 06:37:00   0.0   1.0
2017-05-29 06:38:00   0.0   0.0
2017-05-29 06:39:00   0.0   2.0
2017-05-29 06:40:00   0.0   NaN
2017-05-29 06:41:00   0.0   NaN
2017-05-29 06:42:00   0.0   NaN
2017-05-29 06:43:00   0.0   NaN
2017-05-29 06:44:00   0.0   NaN
2017-05-29 06:45:00   2.0   NaN
2017-05-29 06:46:00   4.0   NaN
2017-05-29 06:47:00   0.0   NaN
2017-05-29 06:48:00   4.0   NaN
2017-05-29 06:49:00   8.0   NaN

Извлеките смещенный столбец в собственный фрейм данных и добавьте столбец счетчика, затем добавьте временную дельту в индекс, замените старый индекс и объедините столбцы данных.

b = df['b'][:10].to_frame()
b.insert(0, 'counter', range(len(b)))
b.index = b.index.to_series().apply(lambda x: x + pd.Timedelta(minutes=b.loc[x].counter))
pd.concat([df['a'], b['b']], axis=1)
                        a     b
DATE
2017-05-29 06:30:00   0.0   0.0
2017-05-29 06:31:00   9.0   NaN
2017-05-29 06:32:00  10.0  24.0
2017-05-29 06:33:00  10.0   NaN
2017-05-29 06:34:00   0.0   1.0
2017-05-29 06:35:00   3.0   NaN
2017-05-29 06:36:00   0.0   1.0
2017-05-29 06:37:00   0.0   NaN
2017-05-29 06:38:00   0.0   7.0
2017-05-29 06:39:00   0.0   NaN
2017-05-29 06:40:00   0.0   3.0
2017-05-29 06:41:00   0.0   NaN
2017-05-29 06:42:00   0.0   4.0
2017-05-29 06:43:00   0.0   NaN
2017-05-29 06:44:00   0.0   1.0
2017-05-29 06:45:00   2.0   NaN
2017-05-29 06:46:00   4.0   0.0
2017-05-29 06:47:00   0.0   NaN
2017-05-29 06:48:00   4.0   2.0
2017-05-29 06:49:00   8.0   NaN

Вероятно, это само собой разумеется, но было бы гораздо лучше применять правильные метки времени к каждому из столбцов, когда вы их загружаете.

20.07.2017
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]