Pandas 线性数学矩阵计算

Pandas Linear math matrix calculation

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

数据来自我上传到我创建的 Github 帐户的 CSV 格式的供热厂。 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

B

我想做的是计算锅炉系统的设定值,该设定值基于室外空气温度。 data[('oat')] 其他数据点是热水 return 和供水温度。最终,我想看看锅炉系统的性能与设定值有多接近。

我要计算的设定点是在室外空气温度为 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 值来得出我计算的设定值?设定值 = -1.33333333 * 数据[('oat')] + 183.33333333

我知道我需要 slice/index 二维 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()

如果我没理解错的话,我想这就是你要找的:

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

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