代码之家  ›  专栏  ›  技术社区  ›  Edamame

pandas:聚合列的值

  •  2
  • Edamame  · 技术社区  · 6 年前

    我有以下数据框:

    name      pet
    ----------------
    John      ['cat']
    Mary      ['cat','dog','bird']
    Ann       ['bird','rat']
    Dave      ['cow','dog']
    

    对于每个人来说,宠物栏是一个动物列表。我需要一份所有宠物的最终清单(没有副本):

    final_list = ['cat', 'dog', 'bird', 'rat', 'cow']
    

    除了逐行循环数据帧之外,是否有一种优雅的方法来实现这一点?谢谢!

    3 回复  |  直到 6 年前
        1
  •  3
  •   iacob    6 年前

    您可以使用 tolist 函数获取所有值的列表,并用 itertools.chain ,然后转换为 set 要获取唯一值:

    import itertools
    
    dfList = df['pet'].tolist()
    
    final_list = list(set(itertools.chain.from_iterable(dfList)))
    

    print(final_list)
    >>> ['cat', 'dog', 'bird', 'rat', 'cow']
    
        2
  •  2
  •   sacuL    6 年前

    您也可以在列表理解中这样做(尽管@ukemi的方法更优雅):

    >>> [i for i in set(df.pet.apply(pd.Series).values.flatten().tolist()) if type(i) == str]
    ['cat', 'bird', 'cow', 'dog', 'rat']
    
        3
  •  -1
  •   Quantum_Something    6 年前

    你也可以简单地用熊猫

    df.pet.unique()。