我正在尝试回答这个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美元/平方英尺)
编辑:
我检查了这些问题
quantities
库。答案 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中的示例,其中系列' data
和index
是相同的值列表。
答案 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