Интерполяция Панд (scipy): метод сплайнов в мультииндексированном фрейме данных дает странный результат - PullRequest
0 голосов
/ 11 октября 2018

Это имеет для меня полный смысл:

import numpy as np
import pandas as pd

nan = np.nan
df = pd.DataFrame.from_dict({'col1': (10, nan, nan, 5)})
df_int = df.interpolate(method='linear', limit_area='inside')

print(df_int)

Вывод:

        col1
0  10.000000
1   8.333333
2   6.666667
3   5.000000

Сценарий, который не имеет смысла

IУ меня есть следующий код для интерполяции мультииндексированного df:

for body_part in self.body_parts:
    for comp in ('x', 'y'):
        print(comp)
        new_df.loc[:, (body_part, comp)] = \
            new_df.loc[:, (body_part, comp)].interpolate(
                method='spline', order=4,
                limit_area='inside')

Зная, что MultiIndexed df не поддерживает сплайн, я выделил отдельные части df в один столбец.

Iсохраните полученную df кода сверху в int_pol и извлеките значения x и y определенной body_part, в данном случае переноса:

x_ni = int_pol['nose']['x']
y_ni = int_pol['nose']['y']

Clean - это df, который мы используем для интерполяции.Мы можем использовать это, чтобы сравнить результат с неизмененной версией данных:

x_nc = clean['nose']['x']
y_nc = clean['nose']['y']

Построение точек Я получаю это: enter image description here

Я также сравнилзначения x после их сортировки для визуализации разницы:

enter image description here

Что-то явно не так с интерполяцией.Есть идеи, в чем может быть проблема?

...