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