迭代Dataframes Pandas列表

时间:2014-01-16 17:59:06

标签: list pandas

我目前有一系列18个DataFrames(每个代表一个不同的年份),由3列和不同数量的行组成,代表氨基酸残基位置的标准化互信息分数,如:

YEAR1

Pos1   Pos2   MI_Score
40     40     1.00    
40     44     0.53
40     70     0.23
44     44     1.00    
44     70     0.90
...

我想迭代这个DataFrame列表,并修剪互信息分数小于0.50的行以及与自身配对的残差的互信息分数。这是我到目前为止所尝试的:

MIs = [MI_95,MI_96,MI_97,MI_98,MI_99,MI_00,MI_01,MI_02,MI_03,MI_04,MI_05,MI_06,MI_07,MI_08,MI_09,MI_10,MI_11,MI_12,MI_13] 
for MI in MIs:    
    p = []
    for q in range(0, len(MI)):
        if MI[0][q] != MI[1][q]:
            if MI[2][q] > 0.5:
                p.append([MI[0][q],MI[1][q],MI[2][q]])
    MI = pd.DataFrame(p) 

然而,这只会削减MI中的第一项。有人可以帮我找到一种方法来遍历整个列表并修剪每个数据帧吗?

谢谢

1 个答案:

答案 0 :(得分:6)

尽可能避免循环。它们比所有数据一起操作的“矢量化”方法慢得多,并且通常不易于读取。这是一种方式。

In [17]: self_paired = df['Pos1'] == df['Pos2']

In [18]: low_MI = df['MI_Score'] < 0.50

In [19]: df[~(low_MI | self_paired)]
Out[19]:
   Pos1  Pos2  MI_Score
1    40    44      0.53
4    44    70      0.90

[2 rows x 3 columns]