2017-01-11 3 views
0

у меня есть DataFrame вроде этого:Resampling dataframe в панд как операция проверки

      A  B value 
2014-11-14 12:00:00  30.5 356.3  344 
2014-11-15 00:00:00  30.5 356.3  347 
2014-11-15 12:00:00  30.5 356.3  356 
2014-11-16 00:00:00  30.5 356.3  349 
... 
2017-01-06 00:00:00  30.5 356.3  347 

Я хочу, чтобы проверить, если индекс работает каждые 12 часов, может быть, там не хватает некоторых данных, так что может быть прыжок 24 или более часов. В этом случае я хочу ввести nan в столбце value и скопировать значения из столбцов A и B.

Я думал использовать resample:

df = df.resample('12H') 

, но я не знаю, как обрабатывает различные столбцы или, если это правильный подход.

EDIT: Если значение отсутствует, например, в 2015-12-12 12:00:00 Я хотел бы добавить строку, как это:

... 
2015-12-12 00:00:00  30.5 356.3 323 
2015-12-12 12:00:00  30.5 356.3 NaN *<- add this* 
2015-12-13 00:00:00  30.5 356.3 347 
... 
+2

Извините, вы после 'df = df.resample ('12H'). Ffill()'? можете ли вы показать, какой должен выглядеть желаемый результат? – EdChum

+0

Хорошо, я редактирую свой вопрос – David

ответ

2

Вы можете использовать метод asfreq производить равномерно разнесено индексирует каждые 12 часов, которые автоматически поместят np.nan значения для каждого прыжка. Затем вы можете просто направить колосники A и B.

df1= df.asfreq('12H') 
df1[['A','B']] = df1[['A','B']].fillna(method='ffill') 
+0

С 'asfreq' он работает, как вы сказали, но с' df1 = df.resample ('12H') 'не работает, и я думаю он должен быть таким же. Я что-то упускаю? (Я получаю 'ValueError: не могу установить элементы в DatetimeIndexResampler'. – David

+1

' resample' создает только объект resample. Это очень похоже на то, что 'groupby' делает. Вы должны действовать на этот объект для создания кадра данных. Как' df.resample ('12H'). Sum() 'или что-то подобное. –

1

Я бы просто за сортировкой свой dataframe по индексу и создать новый столбец, который принимает значение из следующей строки (за время). Текущее время будет называться «от», а время со следующего раза будет называться «до».

Следующим шагом будет использование двух столбцов («от» и «до») для создания столбца, содержащего список значений между этой строкой и следующей строкой каждые 12 часов (диапазон в основном).

Заключительным шагом было бы «разбить» каждую строку для каждого значения в диапазоне. Посмотрите на How to explode a list inside a Dataframe cell into separate rows

Надеются, что это помогает :)

Смежные вопросы