【问题标题】:Add a new column in another df depending on informations in another df with pandas根据另一个带有熊猫的df中的信息,在另一个df中添加一个新列
【发布时间】:2019-11-26 07:55:29
【问题描述】:

我必须对文件进行制表符,例如:

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

这个想法是首先为Names中的每个元素检查file2.txt,如果这个元素有一个(+)(-),那么检查它对应的Clustername然后继续@ 987654328@ 并在Clustername 列添加相应的clustername。 这里例如 il line 2 有 Seq1(+),它的 Clustername 是 Cluster1,然后我在 file1.txt 中查找存在 Seqname1 的行,并将 Cluster1 添加到 Clustername 列。

所以最后我应该得到类似的东西:

Clustername Seqname1 Seqname2
Cluster1 Seq1(+) SeqA
Cluster1 Seq2(-) SeqA
Cluster1 Seq3(+) SeqB
Cluster1 Seq2(-) SeqC
Cluster2 Seq8(-) SeqY
Cluster2 Seq8(-) SeqH
Cluster3 Seq10(+) SeqK

有人知道使用 python 和 pandas 吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    先读取文件

    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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 2020-12-29
    • 2021-12-22
    • 2020-09-16
    • 2017-06-26
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多