Python Y对X的线性插值
我试图回答这个问题: 我喜欢Python和Pandas,所以我使用Pandas(版本0.14) 我有这个数据帧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),
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
- 展示我所需要的;“二维”线性插值;但是这个问题集中在Python
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]