根据 panda 和 matplotlib 中的 y 值查找 x 值



我正在尝试弄清楚如何根据熊猫数据系列和 matplolib 中的 y 值获取 x 值。

更准确地说,我需要在 y=0.5 时从多列中获取 x 值。数据根据用户输入进行标准化和剪切。

我没有足够的数据点来获得精确的 0.5 值(最接近的可能是 0.4 或 0.6(

我虽然也许可以在 0.5 值处画线并获得交点或以某种方式插值数据,但我真的不知道如何正确地做到这一点。

也许有人有一些建议?

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('test.csv', header=0, sep=',' )  
colnames = list(df.columns)
print(colnames)
colnames.pop(0)
for i in colnames:
df[i]= (df[i] - df[i].min()) / (df[i].max() - df[i].min())

print(df)
df.plot(x='Temperature')
plt.show()
y = input('Enter temperature')
d1 = df[df['Temperature'] >= int(y)]
a = input('Second temperature')
d2 = d1[d1['Temperature'] <= int(a)]
colnames2 = list(d2.columns)
for i in colnames2:
df[i] = (df[i] - df[i].min()) / (df[i].max() - df[i].min())
main = d2.plot(x='Temperature')
line = plt.axhline(y=0.5, color='black', linestyle='-')
plt.show()
p1 = d2.interpolate()

编辑:我意识到你试图从y预测x,而不是x预测y,所以我在下面交换了我的变量。问题类似。

这样做的最佳方法取决于数据与什么相关,如何分发等。但是,一种方法是基于数据训练线性模型,然后在 y 等于 0.5 时使用该模型估计 x 的值。

例如,您可以使用scikit-learn提供的线性模型之一:

import pandas as pd
from sklearn import linear_model
import numpy as np
from io import StringIO
data = """y,x
0.1,4
0.2,8
0.3,12
0.4,16
0.6,24
"""
df = pd.read_csv(StringIO(data))
x = df[['x']]
y = df[['y']]
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the available data
regr.fit(y, x)
# Predict for the missing value
interpolated = regr.predict(np.array([[0.5]]))
print(float(interpolated))

。或者,您可以根据数据的情况拟合更复杂的模型。

最新更新