#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()