Pandas 熊猫:寻找函数的根

Pandas 熊猫:寻找函数的根,pandas,Pandas,我在pandas中有一些数据框,其中的列可以看作是索引的平滑函数: f g x ------------ 0.1 f(0.1) g(0.1) 0.2 f(0.2) g(0.2) ... 我想知道一些f(x)=y的x值,其中y是给定的,我不一定在我要找的x上有点 本质上,我想找到熊猫中一条直线和一个数据系列的交点。有没有最好的方法可以做到这一点?假设您的数据帧如下所示: import numpy as np import pandas as pd def unkno

我在pandas中有一些数据框,其中的列可以看作是索引的平滑函数:

       f     g
 x  ------------
0.1 f(0.1) g(0.1)
0.2 f(0.2) g(0.2)

...
我想知道一些
f(x)=y
x
值,其中
y
是给定的,我不一定在我要找的
x
上有点


本质上,我想找到熊猫中一条直线和一个数据系列的交点。有没有最好的方法可以做到这一点?

假设您的数据帧如下所示:

import numpy as np
import pandas as pd

def unknown_func(x):
    return -x ** 3 + 1

x = np.linspace(-10, 10, 100)
df = pd.DataFrame({'f': unknown_func(x)}, index=x)
然后,使用scipy,您可以:

然后求解x的
f(x)-y=0

import scipy.optimize as optimize
root = optimize.brentq(lambda x: func(x)-y, x.min(), x.max())


请注意,您需要一些数据模型。上面是线性插值器, 隐式地为未知函数施加一个模型 生成数据

如果您已经有一个模型函数(例如
unknown\u func
),那么您可以使用它来代替
interp1d
返回的
func
。如果 您有一个参数化模型函数,然后可以使用 寻找最佳拟合参数。如果你选择了 要进行插值,还有许多其他选择(例如二次或三次 插值)用于您可能也会使用的插值。选择什么取决于您认为对数据建模最好的方法

import scipy.optimize as optimize
root = optimize.brentq(lambda x: func(x)-y, x.min(), x.max())
import numpy as np
import pandas as pd
import scipy.optimize as optimize
import scipy.interpolate as interpolate

def unknown_func(x):
    return -x ** 3 + 1

x = np.linspace(-10, 10, 100)
df = pd.DataFrame({'f': unknown_func(x)}, index=x)

y = 50
func = interpolate.interp1d(x, df['f'], kind='linear')
root = optimize.brentq(lambda x: func(x)-y, x.min(), x.max())
print(root)
# -3.6566397064

print(func(root))
# 50.0

idx = np.searchsorted(df.index.values, root)
print(df.iloc[idx-1:idx+1])
#                    f
# -3.737374  53.203496
# -3.535354  45.187410