我的数据框中有一个列表,这是一个例子:
movieId title genres
0 1 Toy Story [Animation, Comedy, Fantasy]
1 2 Jumanji [Adventure, Fantasy]
2 3 Grumpier Old Men [Comedy, Romance]
3 4 Waiting to Exhale [Comedy, Drama, Romance]
如何从此行的列表中获取包含唯一项目的列表? Pandas是否提供了一种快速内置的方法,可以在不使用循环的情况下完成此操作。
输出可以是:
[Animation, Comedy, Fantasy, Adventure, Romance, Drama]
答案 0 :(得分:2)
您可以使用chain
中的itertools
展平嵌套列表,并使用set
获取唯一值:
from itertools import chain
set(chain.from_iterable(df.genres))
# {'Adventure', 'Animation', 'Comedy', 'Drama', 'Fantasy', 'Romance'}
或其他pandas
解决方案:
df.genres.apply(pd.Series).stack().drop_duplicates().tolist()
# ['Animation', 'Comedy', 'Fantasy', 'Adventure', 'Romance', 'Drama']
答案 1 :(得分:2)
使用集合并通过简单遍历系列更新它:
unique_items = set()
df.genres.apply(unique_items.update)
unique_items
Out[66]: {'Adventure', 'Animation', 'Comedy', 'Drama', 'Fantasy', 'Romance'}
答案 2 :(得分:1)
方法1
pd.DataFrame
和set
set(pd.DataFrame(df.genres.tolist()).stack().tolist())
方法2
自定义函数box
+ set
def box(l):
lengths = [len(item) for item in l]
shape = (len(l), max(lengths))
a = np.full(shape, None, dtype=object)
for i, r in enumerate(l):
a[i, :lengths[i]] = r
return a
set(box(df.genres.tolist()).ravel().tolist())