Pandas线性数学矩阵计算

时间:2018-02-09 20:08:32

标签: python pandas numpy math data-science

我在pandas数据框中有一些数据,我正在尝试创建另一个严格计算值的数据框。

数据来自加热工厂,采用CSV格式,我上传到我创建的Github帐户。 https://github.com/bbartling/Data

data = pd.read_csv('C:\\Users\\Python Scripts\\SetPoint_data.csv', index_col='Date', parse_dates=True)

data.info()

输出是:

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 69839 entries, 2017-10-01 05:00:11.205000 to 2018-01-02 05:45:14.419000
Data columns (total 3 columns):
hwr    69839 non-null float64
hws    69839 non-null float64
oat    69839 non-null float64
dtypes: float64(3)
memory usage: 2.1 M

我要做的是计算锅炉系统的设定值,设定值基于室外空气温度。 data[('oat')]其他数据点是热水回流和供应温度。最后,我试图了解锅炉系统的设定值有多接近。

我想要计算的设定值是10F室外空气温度,加热水将是170设定点,而在室外空气温度为40F时,加热水将设定为130°。它实际上是一个简单的线性重置计算,但我不知道如何构建另一个pandas数据帧。

X = data[('oat')]

def setpoint_calc(X):
    A = np.matrix([[10,1],[40,1]])
    B = np.matrix([[170],[130]])
    A_inverse = np.linalg.inv(A)
    X = A_inverse * B

    return X

setpoint_calc(X)

输出是:

matrix([[  -1.33333333],
        [ 183.33333333]])

那么我如何扫描一系列x值来得出我计算出的设定值? setpoint = -1.33333333 * data [(&#39; oat&#39;)] + 183.33333333

我知道我需要对2d numpy数组进行切片/索引,但我不确定如何...是循环中最好的方法?

setpoint = pd.DataFrame()
for X in X:
    setpoint_calc.append(X)

我可以直观地将它放入散点图中,并用一些线来表示我想要在单独的dataFrame中计算的内容...希望这是有道理的:

plt.scatter(data['oat'], data['hws'], color='grey', marker='+')

plt.plot([10,40],[170,130], color='blue', label='Reset Range')

plt.plot([40,80],[130,130], color='green', label='130F during mild weather')
plt.plot([-25,10],[170,170], color='red', label='170F during cold weather')

plt.xlabel('Outdoor Temp')
plt.ylabel('Hot Water Temp')
plt.title('Calculated Setpoint')

plt.legend()

plt.show()

scatter

1 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为这就是你要找的东西:

data['setpoint'] = data['oat'].apply(lambda x: -1.33333333 * x + 183.33333333)

这将对oat列中的每个值执行计算,并将计算出的值存储在DataFrame上名为setpoint的新列中。