Я написал функцию для вычисления градиента между двумя столбцами двух фреймов данных и вывода этого градиента в новый фрейм данных.Эти столбцы имеют одинаковые заголовки, и при объединении столбцов добавляется суффикс _A или _B.
Заголовки столбцов являются химическими формулами; ожидается, что вывод таблицы будет осуществляться в столбцах данных, где имеется градиент линейной регрессии между двумя столбцами для одной и той же химической формулы из двух кадров данных.
Входные кадры данных содержат столбцы с заголовками химических формул, целочисленные значения в каждом из столбцов и индексируются с указанием даты и времени.
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
Ожидается, что на выходе будет таблица с таким количеством строк, сколько есть химических формул (столбцы во входных данных) и одним значением градиента, соответствующим каждой строке.Однако в настоящее время выходные данные показывают только химическую формулу и градиент для первого столбца.