给定此数据帧
import pandas as pd
df = pd.DataFrame({
'RATIO': [1, .8, .6, .3, .2, 0],
'VALUE': [100, 75, 55, 45, 35, 25]
})
print (df)
RATIO VALUE
0 1.0 100
1 0.8 75
2 0.6 55
3 0.3 45
4 0.2 35
5 0.0 25
对于插值RATIO列值.75,对VALUE列值进行插值的最有效方法是什么?
我必须将索引设置为RATIO,然后重新索引,在索引上加.75,然后排序,然后插值(如下所示?(还是有更方便的方法?
谢谢。
df = df.set_index('RATIO')
df = df.reindex(df.index.values.tolist() + [.75])
df = df.sort_index(ascending=False)
df['VALUE'] = df['VALUE'].interpolate(method='linear')
print (df)
VALUE
RATIO
1.00 100.0
0.80 75.0
0.75 65.0
0.60 55.0
0.30 45.0
0.20 35.0
0.00 25.0
h/t到@dermen,值得注意的是,根据所需的输出值,可能会传递插值方法="索引",而不是方法="线性",就像我在上所做的那样
df['VALUE'] = df['VALUE'].interpolate(method='index')
注意,您提出的方法实际上是不正确的,您需要设置method='index'
,否则这些值将被视为等距(根据df.interpolate文档(
在任何情况下,我都会简单地直接使用scipy,因为它与系列兼容:
import pandas
from scipy.interpolate import interp1d
df = pandas.DataFrame({
'RATIO': [1, .8, .6, .3, .2, 0],
'VALUE': [100, 75, 55, 45, 35, 25]
})
val = interp1d(df.RATIO, df.VALUE, bounds_error=False, fill_value=np.nan, kind='linear')(0.75)
print(val)
# 70
注意,这种方法不需要排序。。。