熊猫:汇总一列的值

时间:2018-07-20 21:34:09

标签: python-3.x pandas aggregate

我有以下数据框:

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

对于每个人,列宠物是动物列表。我需要获得所有宠物的最终名单(无重复):

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

除了逐行遍历数据帧外,是否有一种优雅的方法来实现这一目标?谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用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']

答案 1 :(得分:2)

您也可以通过列表理解的方式执行此操作(尽管@ukemi的方法更优雅):

>>> [i for i in set(df.pet.apply(pd.Series).values.flatten().tolist()) if type(i) == str]
['cat', 'bird', 'cow', 'dog', 'rat']

答案 2 :(得分:-1)

您也可以简单地使用熊猫来做

  

df.pet.unique()