我已经编写了一个函数来计算两个数据帧的两列之间的梯度,并将这个梯度输出到一个新的数据帧中。这些列具有相同的标题,合并列时将添加后缀a或b。
列标题是化学公式,表输出应该在dataframe列中,其中两列之间对于来自两个dataframe的同一化学公式存在线性回归的梯度。
输入数据帧包含具有化学公式标题的列、每个列中的整数值,并使用datetimeindex索引。
def find_gradient(dfA, dfB):
dfA.resample('1min')
dfB.resample('1min')
combined_df = dfA.merge(dfB,how='inner',left_index=True,right_index=True, suffixes=('_A', "_B"))
combined_df= combined_df.dropna(how='all', axis=0)
#return combined_df
listofcols = combined_df.columns
listofcols = listofcols.tolist()
listofformulas = dfA.columns
listofformulas = listofformulas.tolist()
for cols in listofcols:
for formula in listofformulas:
A = [col for col in combined_df if col.startswith(formula) and col.endswith('_A')]#.str] # startswith(formula)
B = [col for col in combined_df if col.startswith(formula) and col.endswith('_B')]#.str] #startswith(formula)
q1 = combined_df[A]
q2 = combined_df[B]
x1 = np.squeeze(np.array(q1))
x2 = np.squeeze(np.array(q2))
gradient = np.polyfit(x1,x2,0) ## fits a linear regression and forces the y-intercept to 0
GradientFormulas = pd.DataFrame(columns=['formula','gradient'])
GradientFormulas = GradientFormulas.append([{'formula':formula,'gradient':gradient}])
return GradientFormulas
输出应该是一个包含化学公式(输入中的列)和对应于每一行的单个渐变值的表格。但是,输出目前只显示第一列的化学式和梯度。