Повторно интерполируйте DataFrame, чтобы он выровнялся с другим (очень связанным) DataFrame. - PullRequest
1 голос
/ 25 сентября 2019

У меня есть два кадра данных с одинаковыми именами столбцов, ['x', 'y'].Ни один из данных не представляет время.Оба этих кадра данных имеют одинаковое количество строк.Их 'x' столбцы очень немного смещены.

Блок данных A, который я считаю "золотым" (или теоретическим, если хотите) набором данных, имеет следующие записи:

x: [0, 1, 2]
y: [0, 1, 2]

Фрейм данных B, который может представлять собой некоторые данные, которые я собрал со стенда электроники, содержит следующие записи:

x: [0, 1.03, 1.98]
y: [0, 1.05, 2.03]

Я хочу перекомпоновать фрейм данных B так, чтобы он представлялданные в тех же x точках, что и в Dataframe A.Чтобы проиллюстрировать это, я хочу преобразовать Dataframe B так, чтобы он выглядел следующим образом:

x: [0, 1,    2]
y: [0, 1.02, 2.05]

Как я получил значения для y?Картинка лучше всего объяснит похожие треугольники, которые я использовал для этого:

similar triangles

Имеет ли pandas встроенную функцию для этого?Есть ли библиотеки, которые помогают мне сделать это?(иначе мне придется написать это с нуля)

Обновление 1

Похоже, scipy.interpolate.interp1d решит эту проблему элегантно.

1 Ответ

1 голос
/ 25 сентября 2019

Самое близкое, что я могу придумать в pandas, это reindex().interpolate().Играя с method опцией interpolate() Я думаю, это может быть то, что вы хотите:

new_x = sorted(pd.concat((df1.x,df2.x)).unique())
df2.set_index('x').reindex(new_x).interpolate(method='krogh')

Вывод:

             y
x             
0.00  0.000000
1.00  1.019233
1.03  1.050000
1.98  2.030000
2.00  2.050751
...