【问题标题】:Aggregate pandas dataframe but collapse duplicate cell values [duplicate]聚合熊猫数据框但折叠重复的单元格值[重复]
【发布时间】:2021-10-17 08:12:41
【问题描述】:

我有以下数据框:

df = pd.DataFrame({'query': ['prefix_v1_0001',   'prefix_v1_0002',   'prefix_v1_0003',   'prefix_v1_0004',   'prefix_v1_0004',   'prefix_v1_0004',   'prefix_v1_0004',   'prefix_v1_0004',   'prefix_v1_0004',   'prefix_v1_0005'],
                   'knum': ['-',   '-',   'K03643',   'K02340',   'K02340',   'K02340',   'K02340',   'K02340',   'K03643',   '-'],
                   'definition': ['-',   '-',   'LPS-assembly lipoprotein',   'DNA polymerase III subunit delta [EC:2.7.7.7]',   'DNA polymerase III subunit delta [EC:2.7.7.7]',   'DNA polymerase III subunit delta [EC:2.7.7.7]',   'DNA polymerase III subunit delta [EC:2.7.7.7]',   'DNA polymerase III subunit delta [EC:2.7.7.7]',   'LPS-assembly lipoprotein',   '-'],
                   'A': ['-',   '-',   'Brite Hierarchies (09180)',   'Genetic Information Processing (09120)',   'Genetic Information Processing (09120)',   'Genetic Information Processing (09120)',   'Brite Hierarchies (09180)',   'Brite Hierarchies (09180)',   'Brite Hierarchies (09180)',   '-'],
                   'B': ['-',   '-',   'Protein families: signaling and cellular processes (09183)',   'Replication and repair (09124)',   'Replication and repair (09124)',   'Replication and repair (09124)',   'Protein families: genetic information processing (09182)',   'Protein families: genetic information processing (09182)',   'Protein families: signaling and cellular processes (09183)',   '-'],
                   'C': ['-',   '-',   'Transporters  (02000) [BR:ko0200]',   'DNA replication  (03030) [PATH:ko0303]',   'Mismatch repair  (03430) [PATH:ko0343]',   'Homologous recombination  (03440) [PATH:ko0344]',   'DNA replication proteins  (03032) [BR:ko0303]',   'DNA repair and recombination proteins  (03400) [BR:ko0340]',   'Transporters  (02000) [BR:ko0200]',   '-']})

我想按query 分组,并使用“|”聚合其他单元格字符。

这是我当前的代码:

df.groupby('query').agg({'knum': lambda x: ' | '.join(x.tolist()),
                         'definition': lambda x: ' | '.join(x.tolist()),
                         'A': lambda x: ' | '.join(x.tolist()),
                         'B': lambda x: ' | '.join(x.tolist()),
                         'C': lambda x: ' | '.join(x.tolist()),
                         })

但是,因为有很多重复的单元格内容,我的表格看起来像这样: 但实际上,对于queryprefix_v1_0004knum 实际上只有 2 个唯一值。 我想去掉所有重复的值,或者aggregate()有办法吗?

这是我想要的输出:

【问题讨论】:

    标签: python pandas dataframe pandas-groupby aggregate


    【解决方案1】:

    如果我理解正确:

    尝试通过groupby()+agg() 并使用set 代替list 来获取唯一值:

    df=df.groupby('query').agg(lambda x:' | '.join(set(x)))
    

    如果顺序很重要,则使用 pd.unique() 获取唯一值:

    df=df.groupby('query').agg(lambda x:' | '.join(pd.unique(x)))
    

    如果要对选定的列执行,则创建这些列的列表并仅对这些列执行聚合:

    cols=['knum','definition','A','B','C']
    df=df.groupby('query')[cols].agg(lambda x:' | '.join(set(x)))
    

    【讨论】:

      【解决方案2】:

      使用具有唯一值的set 代替列表:

      df.groupby('query').agg({'knum': lambda x: ' | '.join(set(x)),
                               'definition': lambda x: ' | '.join(set(x)),
                               'A': lambda x: ' | '.join(set(x)),
                               'B': lambda x: ' | '.join(set(x)),
                               'C': lambda x: ' | '.join(set(x)),
                               })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 2018-07-18
        • 1970-01-01
        相关资源
        最近更新 更多