Создайте новый фрейм данных panda с фиксированным расстоянием, используя интерполяцию

#pandas #interpolation

#pandas #интерполяция

Вопрос:

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

 df =     {'X': [0, 3, 6, 7, 8, 11],
         'Y1': [8, 5, 4, 3, 2, 1.5],
         'Y2': [1, 2, 4, 5, 5, 5]}
  

Я хотел бы создать новый фрейм данных, в котором я использую interpolate, где ‘X’ выполняется с фиксированными шагами [0, 2, 4, 6, 8, 10].
Чтобы найти новые значения ‘Y’, мне нужно найти f (x) = Y1, а затем я могу оценивать каждый шаг в X. Но поскольку у меня много Y, я думаю, что должен быть более умный способ сделать это.

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

1. Какова ваша функция f (x)? Итак, если я правильно понимаю, вы хотите найти, для какого из этих Ys применяется следующее: f(x)==Y

2. Простая линейная функция была бы в порядке. Работа, которую я использую прямо сейчас, заключается в том, чтобы взять значения для каждого столбца, а затем использовать numpy.interp. Затем я могу оценить все X, которые меня интересуют, а затем создать новый фрейм данных. Я искал возможность переиндексировать фрейм данных для X, но дело в том, что у меня много X, и мне нужны значения только для определенных шагов.

Ответ №1:

Решение, которое я нашел, было следующим:

 step_size = 0.25
no_steps = int(np.floor(max(b['X'])/step_size))
for i in range(0,no_steps 1):
    b = b.append({'X' : 0.25*i, 'StepNo' : 10, 'PointNo' : 23 i}, ignore_index=True)
b = b.sort_values(['X'])
b = b.set_index(['X'])
c = b.interpolate('index')
c = c.reset_index()
c = c.sort_values(['PointNo'])
  

Итак, сначала я определяю размер шага. Затем я вычисляю количество шагов. Затем я добавляю шаги в фрейм данных. Отсортируйте фрейм данных и переиндексируйте, чтобы я мог использовать интерполяцию с использованием ‘index’ в качестве значений.