嘿,我必须制表符文件,例如:
file1.txt
Seqname1 Seqname2
Seq1(+) SeqA
Seq2(-) SeqA
Seq3(+) SeqB
Seq2(-) SeqC
Seq8(-) SeqY
Seq8(-) SeqH
Seq10(+) SeqK
file2.txt
Clustername Names
Cluster1 SeqA
Cluster1 Seq1(+)
Cluster1 SeqC
Cluster1 Seq2(-)
Cluster1 Seq3(+)
Cluster1 SeqB
Cluster1 SeqG
Cluster2 Seq8(-)
Cluster2 SeqY
Cluster2 SeqH
Cluster3 Seq10(+)
Cluster3 SeqK
这个想法是先为file2.txt
中的每个元素检入Names
,如果该元素具有(+)
或(-)
,然后检查其对应的{ {1}},然后继续Clustername
,并在列file1.txt
上添加相应的Clustername
。
例如,在il clustername
中有一个Seq1(+),它的簇名称是line 2
,然后我在Cluster1
中寻找存在file1.txt
的那一行,然后添加{ {1}}到Clustername列。
所以最后我应该得到类似的东西:
Seqname1
有人对使用python和pandas有想法吗?
答案 0 :(得分:0)
先阅读文件
df1=pd.read_csv('your directory path/file1.txt', sep=" ")
df2=pd.read_csv('your directory path/file2.txt', sep=" ")
然后
我们可以使用Series.str.contains
来检查包含(+)
或(-)
的行。我们可以执行boolean indexing
,然后使用DataFrame.merge
:
m1=df2['Names'].str.contains('(+)',regex=False)
m2=df2['Names'].str.contains('(-)',regex=False)
new_df=df2[m1|m2].merge(df1,left_on='Names',right_on='Seqname1').drop('Names',axis=1)
print(new_df)
Clustername Seqname1 Seqname2
0 Cluster1 Seq1(+) SeqA
1 Cluster1 Seq2(-) SeqA
2 Cluster1 Seq2(-) SeqC
3 Cluster1 Seq3(+) SeqB
4 Cluster2 Seq8(-) SeqY
5 Cluster2 Seq8(-) SeqH
6 Cluster3 Seq10(+) SeqK