#python-3.x #pandas
#python-3.x #pandas
Вопрос:
У меня есть фрейм данных с двумя столбцами, пройденными секундами и значением. В строке пройденных секунд фрейм данных иногда пропускает секунду (данные отсутствуют). Я хотел бы заполнить недостающие секунды и интерполировать недостающее значение.
То, что я пробовал до сих пор, — это выполнить первое и последнее измерение фрейма данных и создать массив Numpy, содержащий все секунды, прошедшие от начала до конца, преобразовал это в фрейм данных, соответствующий первому, и попытался объединить или объединить их.
Исходный df выглядит так:
seconds value
0 1 5.560000
1 3 5.590000
2 4 5.620000
3 5 5.646667
4 7 5.653333
5 9 5.760000
Затем я создаю другой фрейм данных df2:
seconds value
0 1 NaN
1 2 NaN
2 3 NaN
3 4 NaN
4 5 NaN
5 6 NaN
6 7 NaN
7 8 NaN
8 9 NaN
Я попытался объединить их вместе, в обоих направлениях примерно так
df = df.merge(df2, how='left')
Я ожидаю, что результат будет
seconds value
0 1 5.560000
1 2 NaN
2 3 5.590000
3 4 5.620000
4 5 5.646667
5 6 NaN
6 7 5.653333
7 8 NaN
8 9 5.760000
но фактический результат — либо df, либо df2, без объединения. Есть ли способ достичь ожидаемого результата, и я на правильном пути или это можно сделать намного проще?
Комментарии:
1. Попробуйте
df.merge(df2, how='outer')
. Внешнее слияние : «используйте объединение ключей из обоих фреймов, аналогично полному внешнему соединению SQL; сортируйте ключи лексикографически».
Ответ №1:
Вам не нужен второй df, используйте df.reindex()
:
df=df.set_index('seconds')
df=df.reindex(range(df.index.min(),df.index.max() 1)).reset_index()
Если необходимо использовать второй df, вы можете использовать:
df=df.set_index('seconds').combine_first(df2.set_index('seconds')).reset_index()
seconds value
0 1 5.560000
1 2 NaN
2 3 5.590000
3 4 5.620000
4 5 5.646667
5 6 NaN
6 7 5.653333
7 8 NaN
8 9 5.760000
Ответ №2:
Я использую update
и решаю вашу проблему
df1.set_index('seconds',inplace=True)
df2.set_index('seconds',inplace=True)
df2.update(df1)
df2.reset_index(inplace=True)
Комментарии:
1. Оба ответа работают, принят первый ответ для устранения необходимости иметь промежуточный фрейм данных.