如何通过列输出嵌套的三重for循环的完整结果表?

2024-10-05 13:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个函数来计算两个数据帧的两列之间的梯度,并在一个新的数据帧中输出这个梯度。这些列具有相同的标题,在合并这些列时,会添加后缀“\u a”或“\u 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

输出应该是一个表,其中包含的行数与化学公式(输入中的列)的行数相同,并且每行对应一个渐变值。但是,输出目前只显示第一列的化学式和梯度


Tags: 数据indffornpcol梯度dfa

热门问题