Python Pandas线性插值Y超过X.

时间:2014-11-30 20:10:12

标签: python pandas linear interpolation

我正在尝试回答这个Udacity问题: https://www.udacity.com/course/viewer#!/c-st101/l-48696651/e-48532778/m-48635592

我喜欢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)

问题是你想用线性插值来回答。

Pandas可以内插吗?怎么样?

我试过了:

df.interpolate(method='linear')

但它给了我 88,000 的费用;只是重复的最后一次成本价值

我试过了:

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

但它给了我 172,000 的费用;仅在 152,000 192,000 的成本之间 更近,但不是我想要的。正确答案是 168,000 (因为“斜率”为80美元/平方英尺)

编辑:

我检查了这些问题

3 个答案:

答案 0 :(得分:3)

熊猫' 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中的示例,其中系列' dataindex是相同的值列表。

答案 1 :(得分:2)

我的Pandas版本(0.19.2)index = 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

答案 2 :(得分:1)

在我的Pandas版本(1.1.1)中,不推荐使用order()。您应该改用sort_values()。这样就可以了:

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