首页 > 解决方案 > 如何在 Pandas 列表列中获取唯一列表

问题描述

我有以下数据框:

import pandas as pd
df = pd.DataFrame({'name': ["John", "Jack", "Jeff", "Kate"], "hobbies":[["pirates"], ["pirates"], ["climbing", "yoga"], ["yoga"]]})

# name  hobbies
# 0 John    [pirates]
# 1 Jack    [pirates]
# 2 Jeff    [climbing, yoga]
# 3 Kate    [yoga]

我想要一份兴趣爱好中的独特列表。为了清楚起见,我不想要独特爱好的列表(即["pirates", "climbing", "yoga"]),这已经包含在几个问题中,包括这个问题:pandas get unique values from column of lists

我想要列表[['pirates'], ['yoga'], ['climbing', 'yoga']]

我想到了以下方式,但这似乎不是很“熊猫”:

[list(t) for t in {tuple(h) for h in df["hobbies"]}]

有更好的方法吗?

标签: pythonpandas

解决方案


让我们改变listtotuple这样我们就可以做到drop_duplicates

out = df.hobbies.apply(tuple).drop_duplicates().apply(list).tolist()
Out[143]: [['pirates'], ['climbing', 'yoga'], ['yoga']]

如果您不需要转换回list,您可以执行以下操作:

df.hobbies.apply(tuple).unique()

推荐阅读