Я действительно должен знать, получил ли я какой-нибудь ген, если мой результат, для этого у меня есть один список с именами моих генов и фрейм данных с теми же самыми:
Например,
liste["gene1","gene2","gene3","gene4","gene5"]
и датафрейм:
name1 name2
gene1_0035 gene1_0042
gene56_0042 gene56_0035
gene4_0042 gene4_0035
gene2_0035 gene2_0042
gene57_0042 gene57_0035
тогда я сделал:
df=pd.read_csv("dataframe_not_max.txt",sep='\t')
df=df.drop(columns=(['Unnamed: 0', 'Unnamed: 0.1']))
#print(df)
print(list(df.columns.values))
name1=df.ix[:,1]
name2=df.ix[:,2]
liste=[]
for record in SeqIO.parse(data, "fasta"):
liste.append(record.id)
print(liste)
print(len(liste))
count=0
for a, b in zip(name1, name2):
if a in liste:
count+=1
if b in liste:
count+=1
print(count)
И я хочу знать, сколько раз я нахожу ген в ма датафрейме из моего списка, но у него нет точно одинакового идентификатора, поскольку в списке нет _number после имени гена, тогда если я в листе не воссоздает ID.
Можно ли сказать что-то вроде:
if a without_number in liste:
В приведенном выше примере это будет:
count = 3, потому что только ген 1,2 и 4 присутствуют как в списке, так и в datafra.
Вот более сложный пример, чтобы увидеть, действительно ли ваш скрипт работает для моих данных:
Допустим, у меня есть датафрейм такой:
cluster_name qseqid sseqid pident_x
15 cluster_016607 EOG090X00GO_0035_0035 EOG090X00GO_0042_0035
16 cluster_016607 EOG090X00GO_0035_0035 EOG090X00GO_0042_0042
18 cluster_016607 EOG090X00GO_0035_0042 EOG090X00GO_0042_0035
19 cluster_016607 EOG090X00GO_0035_0042 EOG090X00GO_0042_0042
29 cluster_015707 EOG090X00LI_0035_0035 EOG090X00LI_0042_0042
30 cluster_015707 EOG090X00LI_0035_0035 EOG090X00LI_0042_0035
34 cluster_015707 EOG090X00LI_0042_0035 g1726.t1_0035_0042
37 cluster_015707 EOG090X00LI_0042_0042 g1726.t1_0035_0042
и список: ["EOG090X00LI_","EOG090X00GO_","EOG090X00BA_"]
здесь я получаю 6, но я должен получить 2, потому что у меня есть только 2 последовательности в моих данных EOG090X00LI и EOG090X00GO
на самом деле, здесь я хочу сосчитать, когда последовательность присутствует только тогда, когда она появляется один раз, даже если она для примера: EOG090X00LI vs seq123454
Не знаю, понятно ли?
Я использовал для примера:
df=pd.read_csv("test_busco_augus.csv",sep=',')
#df=df.drop(columns=(['Unnamed: 0', 'Unnamed: 0.1']))
print(df)
print(list(df.columns.values))
name1=df.ix[:,3]
name2=df.ix[:,4]
liste=["EOG090X00LI_","EOG090X00GO_","EOG090X00BA_"]
print(liste)
#get boolean mask for each column
m1 = name1.str.contains('|'.join(liste))
m2 = name2.str.contains('|'.join(liste))
#chain masks and count Trues
a = (m1 & m2).sum()
print (a)