Выбор строк DF на основе значения из другого DF

#python #pandas #dataframe

#python #панды #фрейм данных

Вопрос:

У меня есть один фрейм данных, который выглядит следующим образом,

 starttime               code                                
2021-01-01 06:16:58.862 ON
2021-01-01 15:37:47.202 OFF
2021-01-01 15:39:48.463 ON
2021-01-01 18:27:57.523 OFF
2021-01-02 07:53:35.581 ON
 

Второй фрейм данных выглядит следующим образом,

 starttime               value
2021-01-01 07:16:34.239 232
2021-01-01 07:16:34.439 233
2021-01-01 07:16:34.539 231
2021-01-01 07:16:34.639 232
2021-01-01 16:32:47.202 43453
2021-01-01 18:32:48.463 2321
2021-01-01 19:21:28.239 34
2021-01-02 06:51:35.232 767
 

Итак, моя цель здесь — получить данные из 2-го фрейма данных на основе значений, переключаемых из включения и выключения в 1-м фрейме данных. Мне нужно объединить все данные между включением и выключением перехода и сохранить их в новом фрейме данных.

Есть ли способ pythonic / pandas сделать это без использования каких-либо циклов for?

Комментарии:

1. Каков ваш ожидаемый результат на основе этого ввода?

2. Как бы вы связали оба фрейма данных? Я спрашиваю, потому что starttime не совпадает в вашем примере

3. Ожидаемый результат @G.Anderson — это что-то вроде объединения всех значений диапазона данных между включенным и выключенным состояниями в первом фрейме данных.

4. Время начала @PauloMarques не будет совпадать, поскольку они являются независимыми событиями друг от друга. Я хочу собирать данные на основе времени начала первых фреймов данных между включением и выключением перехода.

Ответ №1:

Вы можете объединить фреймы данных по вертикали, а затем использовать вменение прямого заполнения для 'code' столбца:

 # concatenate dataframes vertically
df3 = pd.concat((df1, df2)).sort_index()

# use method='ffill'
df3['code'] = df3['code'].fillna(method='ffill')

df3
 

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

Вы также можете удалить нулевые значения:

 df.dropna()
 

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