根据另一个df中与熊猫相关的信息,在另一个df中添加新列

时间:2019-11-25 15:15:30

标签: python pandas

嘿,我必须制表符文件,例如:

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有想法吗?

1 个答案:

答案 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