Python Pandas: 若列表中的项匹配pandas列行,则添加新列

2024-09-28 22:21:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧和一个列表列表(每个子列表有3个项[name,seq,qual])。我想检查列表列表中的第一个项目是否与df的name列匹配,如果匹配,我想创建新的列,将项目[1]和项目[2]添加到dataframe。你知道吗

要设置它:

reads = [['read1', 'ACTG', 'FFFF'], ['read2', 'TTTT', 'FF:F'], ['read3', 'ATGC', 'F:FF']]
df = pd.DataFrame(reads, columns=['ReadName', 'Sequence1', 'Qual1'])
reads2 = [['read3', 'CGCG', 'F::F'], ['read1', 'TGTG', 'F:FF'], ['read2', 'AAAA', 'FFFF']]

我试过的:

for item in reads2:
    if item[0] in df['ReadName']:
        df['Sequence2'] = item[1]
        df['Qual2'] = item[2]

但是最终的df看起来像:

  ReadName Sequence1 Qual1 Sequence2 Qual2
0    read1      ACTG  FFFF      CGCG  F::F
1    read2      TTTT  FF:F      CGCG  F::F
2    read3      ATGC  F:FF      CGCG  F::F

因此,它只是将列表列表中的第一项添加到df中的所有行中。我希望它看起来像:

  ReadName Sequence1 Qual1 Sequence2 Qual2
0    read1      ACTG  FFFF      TGTG  F:FF
1    read2      TTTT  FF:F      AAAA  FFFF
2    read3      ATGC  F:FF      CGCG  F::F

Tags: 项目df列表itemffffffttttatgc
2条回答

使用.loc更新行

for item in reads2:

    if item[0] in list(df['ReadName']):

        df.loc[df['ReadName']==item[0],'Sequence2'] = item[1]
        df.loc[df['ReadName']==item[0],'Qual2'] = item[2]

使用左连接:

df2 = pd.DataFrame(reads2, columns = ['ReadName', 'Sequence2', 'Qual2'])
df.merge(df2, on='ReadName')

看起来像:

    ReadName    Sequence1   Qual1   Sequence2   Qual2
0   read1   ACTG    FFFF    TGTG    F:FF
1   read2   TTTT    FF:F    AAAA    FFFF
2   read3   ATGC    F:FF    CGCG    F::F

相关问题 更多 >