pandas df-将A列中的值插值为B列中的插值



给定此数据帧

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

注意,这种方法不需要排序。。。

最新更新