Python Y对X的线性插值

Python Y对X的线性插值,python,pandas,linear-interpolation,Python,Pandas,Linear Interpolation,我试图回答这个问题: 我喜欢Python和Pandas,所以我使用Pandas(版本0.14) 我有这个数据帧df= pd.DataFrame(dict(size=(1400, 2400, 1800, 1900, 1300, 1100),

我试图回答这个问题:

我喜欢Python和Pandas,所以我使用Pandas(版本0.14)

我有这个数据帧
df=

pd.DataFrame(dict(size=(1400,
                        2400,
                        1800,
                        1900,
                        1300,
                        1100), 
                   cost=(112000,
                         192000,
                         144000,
                         152000,
                         104000,
                         88000)))
我将2100平方英尺的价值添加到我的数据框中(请注意,没有成本;这是个问题;您希望为2100平方英尺的房子支付多少费用)

该问题希望您使用线性插值来回答您期望支付的成本/价格

熊猫可以插值吗?怎么做?

我试过这个:

df.interpolate(method='linear')
但它给了我88000美元;只是重复了最后的成本值

我试过这个:

df.sort('size').interpolate(method='linear')
但它给了我172000美元;仅为152000和192000之间的一半 更近,但不是我想要的。正确答案是168000(因为存在80美元/平方英尺的“坡度”)

编辑:

我检查了这些问题

    • 演示“1D”线性插值;这给了我错误的答案
    • 展示我所需要的;“二维”线性插值;但是这个问题集中在Python
      quantities
      库上

Pandas'
method='linear'
插值将实现我所称的“1D”插值

如果要在“自变量”上插入“因变量”,请将“自变量”设为“自变量”;i、 e.一个系列的索引,并使用
method='Index'
(或
method='values'
,它们是相同的)

换言之:

pd.Series(index=df.size, data=df.cost.values) #Make size the independent variable
    # SEE ANSWER BELOW; order() method is deprecated; use sort_values() instead
    .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'
这将返回正确答案168000

从中的示例中,我不清楚这一点,其中系列“
数据”和“
索引”是相同的值列表。

与我的熊猫(0.19.2)版本的索引=df.size breaks 用词不吉利--事情就是桌子的大小。。。所以这是有效的

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

在我的Pandas版本(1.1.1)中,
order()
不推荐使用。您应该使用
对值进行排序()
。这就是工作:

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

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