2014-11-30 2 views
1

Я пытаюсь ответить на этот вопрос: Udacity https://www.udacity.com/course/viewer#!/c-st101/l-48696651/e-48532778/m-48635592Python Панды Linear Interpolate Y над X

Мне нравится Python & панда так я использую панда (версия 0,14)

У меня есть этот DataFrame df=

pd.DataFrame(dict(size=(1400, 
         2400, 
         1800, 
         1900, 
         1300, 
         1100), 
        cost=(112000, 
         192000, 
         144000, 
         152000, 
         104000, 
         88000))) 

Я добавил это значение (уведомление не стоимость, то есть вопрос, что бы вы готовы платить за дом 2,100 sq ft

df.append(pd.DataFrame({'size':(2100,)}), True) 

Вопрос требует ответа с линейной интерполяцией.

Can Pandas интерполяция? И как?

Я попытался это:

df.interpolate(method='linear') 

Но это дало мне стоимость ; только последнее значение стоимости повторил

Я попытался это:

df.sort('size').interpolate(method='linear') 

Но это дало мне стоимость ; на полпути между стоимостью и 192,000 Ближе, но не то, что я хочу. Правильный ответ (потому что есть "уклон" в размере $ 80/Квадратные футы)

EDIT:

Я проверил эти SO вопросы

  • Interpolation on DataFrame in pandas
    • Демонстрирует «1D " линейная интерполяция; что дает мне неправильный ответ
  • Pandas interpolate data with units
    • Демонстрирует, что мне нужно; «2D» линейная интерполяция; но этот вопрос сосредоточен на библиотеке Python quantities.

ответ

2

Панды method='linear' интерполяция будет делать то, что я называю „1D“ интерполяция

Если вы хотите интерполировать „зависимой“ переменной над „независимой“ переменной, сделать „независимой“ переменной; то естьИндекс серии, и использовать method='index' (или method='values', они же)

Другими словами:

pd.Series(index=df.size, data=df.cost.values) #Make size the independent variable 
    .order() #Orders by the index, which is size in sq ft; interpolation depends on order (see OP) 
    .interpolate(method='index')[2100] #Interpolate using method 'index' 

Это возвращает правильный ответ 168.000

Это не ясно из примера в Pandas Documentation, где серии data и index - это тот же список значений.

2

с моей версией панд (0.19.2) индекс = df.size ломает незадачливого выбор слов - то есть размер таблицы ... так это работает

df=df.append(pd.DataFrame({'size':(2100,)}), True) 
pd.Series(index=df['size'].values, 
data=df['cost'].values).order().interpolate(method='index')[2100] 

= 168000,0

Смежные вопросы