我有以下数据框:
name pet
----------------
John ['cat']
Mary ['cat','dog','bird']
Ann ['bird','rat']
Dave ['cow','dog']
对于每个人,列宠物是动物列表。我需要获得所有宠物的最终名单(无重复):
final_list = ['cat', 'dog', 'bird', 'rat', 'cow']
除了逐行遍历数据帧外,是否有一种优雅的方法来实现这一目标?谢谢!
答案 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()