繁体   English   中英

迭代两个不同长度的数据帧列表并将它们作为数据帧连接在一个循环中以执行 function

[英]Iterating over two list of dataframes of different length and concatenating as dataframes them within a loop to perform a function

说,我有两个数据框列表。 数据框列表的大小是,

len(list_df1)
20
list_df1
[                 Gene_id  TCGA-A1-A0SM-01A-11R-A084-07  \
 0     ENSG00000000003_PC                  2.609759e+05   
 1     ENSG00000000005_PC                  2.046517e+02   
 2     ENSG00000000419_PC                  6.300425e+05   
 3     ENSG00000000457_PC                  7.922487e+04   
 4     ENSG00000000460_PC                  4.759842e+04   
 ...                  ...                           ...   
 999   ENSG00000067167_PC                  1.661041e+06   
 1000  ENSG00000067177_PC                  1.117150e+05   
 1001  ENSG00000067182_PC                  8.435913e+05   
 1002  ENSG00000067191_PC                  1.219213e+05   
 1003  ENSG00000067208_PC                  8.953860e+04   
 
       TCGA-A2-A04W-01A-31R-A115-07  TCGA-A2-A04X-01A-21R-A034-07  \
 0                     3.557029e+05                 112350.116669   
 1                     3.668742e+02                    678.138127   
 2                     9.395870e+05                 980843.179895   
 3                     7.663316e+04                  54672.074426   
 4                     3.543807e+04                  21895.818992   
 ...                            ...                           ...   
 999                   1.306383e+06                 652885.437844   
 1000                  1.706889e+05                  65106.955798   
 1001                  1.255371e+06                 634635.692737   
 1002                  4.121517e+04                  35705.970261   
 1003                  7.729493e+04                  51846.101598   
 
       TCGA-A2-A0D1-01A-11R-A034-07  TCGA-A2-A0EQ-01A-11R-A034-07  \
 0                     4.379606e+05                  2.218208e+05   
 1                     2.502301e+03                  1.585833e+03   
 2                     5.090120e+05                  6.800754e+05   
 3                     7.601743e+04                  6.207091e+04   
 4                     4.759907e+04                  4.022122e+04   
 ...                            ...                           ... 

对于第二个数据框列表,

len(list_df2)
15
list_df2
[                       Gene_id  TCGA-A1-A0SM-01A-11R-A084-07  \
 1580   ENSG00000082929_lncRNAs                    283.066402   
 1598   ENSG00000083622_lncRNAs                      0.000000   
 1995   ENSG00000093100_lncRNAs                    761.296884   
 2127   ENSG00000099869_lncRNAs                   4134.407284   
 2819   ENSG00000103472_lncRNAs                   4081.669994   
 ...                        ...                           ...   
 25447  ENSG00000224648_lncRNAs                      0.000000   
 25448  ENSG00000224649_lncRNAs                      0.000000   
 25450  ENSG00000224652_lncRNAs                  13698.679519   
 25452  ENSG00000224655_lncRNAs                    454.154778   
 25455  ENSG00000224658_lncRNAs                      0.000000   
 
        TCGA-A2-A04W-01A-31R-A115-07  TCGA-A2-A04X-01A-21R-A034-07  \
 1580                   16745.726795                      0.000000   
 1598                       0.000000                      0.000000   
 1995                    1091.806755                    504.529752   
 2127                    2058.792103                      0.000000   
 2819                    4541.654924                  12125.955565   
 ...                             ...                           ...   
 25447                      0.000000                      0.000000   
 25448                   1806.322490                      0.000000   
 25450                  20679.823343                   8560.813731   
 25452                      0.000000                      0.000000   
 25455                      0.000000                      0.000000   
 
        TCGA-A2-A0D1-01A-11R-A034-07  TCGA-A2-A0EQ-01A-11R-A034-07  \
 1580                   79172.350419                    365.577246   
 1598                       0.000000                      0.000000   
 1995                     698.135025                    294.962048   
 2127                    1053.164305                      0.000000   
 2819                    4517.449536                   9633.998928   
 ...                             ...                           ...   
 25447                      0.000000                      0.000000   
 25448                      0.000000                      0.000000   
 25450                   6887.145309                    931.142046   
 25452                    347.062760                    293.268032   
 25455                   1619.254228                      0.000000   
 
        TCGA-A2-A0T1-01A-21R-A084-07  TCGA-A2-A3XV-01A-21R-A239-07  \
 1580                    1024.779160                  29452.491771   
 1598                       0.000000                      0.000000   
 1995                     551.221323                    243.727431   
 2127                     415.769586                    551.508707   
 2819                   10530.579870                   2027.695619   
 ...                             ...                           ...  

现在,我需要的是,将两个列表中的数据帧连接成更小的数据帧,并为每个数据帧运行 function。

说我的function是做相关分析的,

import pandas as pd
from scipy.stats import pearsonr
    def correlation(df):
        correlations = pd.DataFrame()
    for PC in [column for column in df.columns if '_PC' in column]:
        for lncRNA in [column for column in df.columns if '_lncRNAs' in column]:
             correlations = correlations.append(pd.Series(pearsonr(df[PC],df[lncRNA]),index=['PCC', 'p-value'],name=PC + '_' +lncRNA))

我需要对上面列表中的每个连接数据帧使用上面的 function。 例如,这是我尝试过的。

for dfs,dfs2 in zip(list_df1,list_df2):
    #print(dfs.iloc[0:2,0:2],dfs2.iloc[0:2,0:2])
    df     = dfs
    df2    = dfs2
    DF = pd.concat([dfs,dfs2])
    
DF_T =DF.set_index("Gene_id").T

DF_T 如下所示,

  DF_T.shape()
(75, 1073)

但是, DF_T是上面定义的 2 个列表(list_df1,list_df2)中仅最后一个数据帧的串联。 因此,如果我在数据帧DF_T上运行correlation function ,它将仅对列表中的最后一个数据帧执行相关性分析。 然而,我的目标是从两个列表中运行所有小的连接数据帧。

因此,我正在寻找一种可以分别从两个列表中提取所有数据帧的方法。 然后,将它们连接成不同的数据帧。 最后,在每个连接的数据帧上应用correlation function。 所有这些都是为了提高相关 function 的性能速度。 我的输入是多个大尺寸的数据框。

非常感谢任何帮助或建议!

使用您自己的代码,这应该可以工作:

def correlation(list_df1,list_df2):
    correlations = pd.DataFrame()
    for dfs,dfs2 in zip(list_df1,list_df2):
        DF = pd.concat([dfs,dfs2])
        df = DF.set_index("Gene_id").T
        for PC in [column for column in df.columns if '_PC' in column]:
            for lncRNA in [column for column in df.columns if '_lncRNAs' in column]:
                 correlations = correlations.append(pd.Series(pearsonr(df[PC],df[lncRNA]),index=['PCC', 'p-value'],name=PC + '_' +lncRNA))    

   return correlations

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM