[英]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.