我在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()
答案 0 :(得分:0)
如果我理解正确,我认为这就是你要找的东西:
data['setpoint'] = data['oat'].apply(lambda x: -1.33333333 * x + 183.33333333)
这将对oat
列中的每个值执行计算,并将计算出的值存储在DataFrame上名为setpoint
的新列中。