代码之家  ›  专栏  ›  技术社区  ›  AM94

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

  •  0
  • AM94  · 技术社区  · 6 年前

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

    输出应该是一个包含化学公式(输入中的列)和对应于每一行的单个渐变值的表格。但是,输出目前只显示第一列的化学式和梯度。

    0 回复  |  直到 6 年前