Python 如何使我的pandas代码更高效?

Python 如何使我的pandas代码更高效?,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: chr POS RS REF ALT 1 chr1 981931 rs2465128 A GA 2 chr1 982994 rs10267 T C 3 chr1 984302 rs9442391 T C 4 chr1 987200 rs9803031 C T 5 chr1 990280 rs4275402

我有以下数据帧:


    chr     POS     RS          REF ALT     
1   chr1    981931  rs2465128   A   GA  
2   chr1    982994  rs10267     T   C   
3   chr1    984302  rs9442391   T   C   
4   chr1    987200  rs9803031   C   T   
5   chr1    990280  rs4275402   CT  C   

如果REF和ALT列的长度都等于1,我希望另一列的值为SNP,如果其中任何一列的长度不同于1,则为INDEL,因此输出应如下所示:

    chr     POS     RS          REF ALT TYPE
1   chr1    981931  rs2465128   A   GA  INDEL
2   chr1    982994  rs10267     T   C   SNP
3   chr1    984302  rs9442391   T   C   SNP
4   chr1    987200  rs9803031   C   T   SNP
5   chr1    990280  rs4275402   CT  C   INDEL
我已经写了一些代码,它确实可以工作,但速度非常慢,我想知道是否有更有效的方法通过理解列表或lambda函数来实现这一点

我的代码

for index, row in table.iterrows():

     if len(row['REF']) == 1 and len(row['ALT']) == 1 :

          table.loc[ index, "TYPE" ] = "SNP"

      else :

          table.loc[ index, "TYPE" ] = "INDEL"
非常感谢

Rachael

用于长度,并通过以下方式设置新列:

用于长度,并通过以下方式设置新列:


熊猫效率建议:尽量不要用于循环。熊猫效率建议:尽量不要用于循环。
m = (table['REF'].str.len() == 1) & (table['ALT'].str.len() == 1)

table["TYPE"] = np.where(m, "SNP", "INDEL")
print (table)
    chr     POS         RS REF ALT   TYPE
1  chr1  981931  rs2465128   A  GA  INDEL
2  chr1  982994    rs10267   T   C    SNP
3  chr1  984302  rs9442391   T   C    SNP
4  chr1  987200  rs9803031   C   T    SNP
5  chr1  990280  rs4275402  CT   C  INDEL