【问题标题】:Find x values based on y value from panda and matplotlib [duplicate]根据来自熊猫和matplotlib的y值查找x值[重复]
【发布时间】:2018-05-24 00:12:40
【问题描述】:

我试图弄清楚如何根据熊猫数据系列和 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()

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

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

    执行此操作的最佳方法取决于数据的相关内容、分布方式等。但是,一种方法是根据数据训练线性模型,然后使用该模型估计 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))
    

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

    【讨论】:

    • 谢谢,我的模型不是线性的,但你认为如果我尝试拟合我的数据(玻尔兹曼应该做到这一点)并从拟合中获得价值会更好吗?
    • 这似乎是明智之举!另一个计划是取两个 Y 值最接近你试图插值的 Y 值,然后取它们的平均值。这适用于非线性数据,只要您拥有的 Y 值足够接近您尝试插值的值。
    • 太好了,我也在考虑获取两个数据点。我会调查的。
    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2020-10-31
    • 2019-03-15
    • 2019-08-05
    • 2018-09-15
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多