我试图弄清楚如何根据熊猫数据系列和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()
答案 0 :(得分:0)
编辑:我意识到你试图从y预测x,而不是从x预测x,所以我在下面交换了我的变量。问题类似。
这样做的最佳方式取决于数据的相关性,分布方式等。但是,一种方法是基于数据训练线性模型,然后使用模型估计x的值当y等于0.5时。
例如,您可以使用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))
...或者您可以根据数据的类型拟合更复杂的模型。