#python
#python
Вопрос:
У меня есть radiosondes
фрейм данных, который содержит много данных радиозондирования. Сейчас выполняются сотни радиозондов, все с уникальной меткой времени, поэтому фрейм данных имеет datetimeindex . Я хочу, чтобы временные ряды переменных (температура, давление и т.д.) основывались на определенном уровне давления. Таким образом, в основном каждый отдельный радиозонд должен давать мне значения других переменных для определенного уровня давления. Проблема возникает из-за того, что интервал давления не является однородным и записывается в 2 десятичных знака. Кроме того, каждый радиозонд имеет разный интервал давления, поскольку измерения проводились каждую секунду, а не на основе давления. То, что я сделал, было следующим:
x = radiosondes[(radiosondes['Press'] >= 500) amp; (radiosondes['Press'] <= 501)]
Теперь эта строка дала мне несколько правильных данных, но не совсем так, как вы видите в результатах ниже: некоторые временные метки включаются несколько раз, потому что они имеют несколько измерений, где давление составляло от 500 до 501 ГПа.
Press GeopHgt Temp RH PO3 GPSHgt O3
datetime
2019-09-21 05:00:00 500.86 5263 237.4 79 NaN 5279.0 NaN
2019-09-21 05:00:00 500.49 5268 237.4 78 NaN 5285.0 NaN
2019-09-21 05:00:00 500.12 5273 237.3 76 NaN 5290.0 NaN
2019-09-22 04:00:00 500.64 5359 243.5 54 NaN 5369.0 NaN
2019-09-22 04:00:00 500.14 5368 243.4 54 NaN 5378.0 NaN
... ... ... ... .. ... ... ..
2020-10-01 11:00:00 500.68 5443 244.6 63 NaN 5460.0 NaN
2020-10-01 11:00:00 500.29 5449 244.6 63 NaN 5466.0 NaN
2020-10-01 14:00:00 500.92 5465 245.1 29 NaN 5485.0 NaN
2020-10-01 14:00:00 500.55 5469 245.1 29 NaN 5490.0 NaN
2020-10-01 14:00:00 500.16 5474 245.1 28 NaN 5496.0 NaN
Итак, я хочу, чтобы каждый радиозонд включался только один раз в новые временные ряды. Я хотел бы выбрать строку, в которой давление ближе всего к 500. Итак, результат будет примерно таким:
Press GeopHgt Temp RH PO3 GPSHgt O3
datetime
2019-09-21 05:00:00 500.12 5273 237.3 76 NaN 5290.0 NaN
2019-09-22 04:00:00 500.14 5368 243.4 54 NaN 5378.0 NaN
... ... ... ... .. ... ... ..
2020-10-01 11:00:00 500.29 5449 244.6 63 NaN 5466.0 NaN
2020-10-01 14:00:00 500.16 5474 245.1 28 NaN 5496.0 NaN
Надеюсь, понятно, что я здесь имел в виду. Заранее большое спасибо!
Комментарии:
1. Можете ли вы продемонстрировать какие- либо усилия по решению этой проблемы самостоятельно?
2. Могли бы вы также предоставить входные данные с помощью объекта dataframe, чтобы мы могли их воспроизвести?
Ответ №1:
Чтобы добиться этого, вы можете сделать следующее: если ваш фрейм данных равен x, и учитывая, что вы ищете давление как можно ближе к 500, значит, оно равно минимальному давлению между 500 и 501:
print(x.loc[x.groupby("datetime")["Press"].idxmin()])
Это сохранит одну строку на группу даты и времени с минимальным давлением, поэтому ближе всего к 500.
Ответ №2:
После первоначальной манипуляции выполните:
x.sort_values('Press').drop_duplicates('date').sort_index()
После этого вам может потребоваться повторно отсортировать ваш фрейм данных в отношении метки времени, что является тривиальным.