计算 pandas 数据框列中唯一项的数量

Count number of unique items in a pandas dataframe column

假设我有一个数据框,例如

import pandas as pd

df = pd.DataFrame({'ProductList':[["ABC", "ABC", "CDE", "CDF"],
                                  ["CDE", "XYZ", "XYZ"],
                                  ["UGH", "ABC", "CDE", "ABC"]],
                   'Customer': ['John', 'Alex', 'Mary']})

df
        ProductList           Customer
    0   [ABC, ABC, CDE, CDF]    John
    1   [CDE, XYZ, XYZ]         Alex
    2   [UGH, ABC, CDE, ABC]    Mary

我的问题是如何计算 ProductList 列中唯一项的数量。根据这个玩具数据,应该有 5 个独特的物品,分别是 'ABC'、'CDE'、'CDF'、'XYZ'、& 'UGH'.

我正在考虑使用 'set' 将 # 个独特的项目放入一个集合中,然后计算这个大集合的长度。但不确定该怎么做。有什么建议么?谢谢

一个快速的选择是:explode + nunique:

df.ProductList.explode().nunique()
# 5
>>> import pandas as pd
>>> df = pd.DataFrame({'ProductList':[["ABC", "ABC", "CDE", "CDF"],
...                                   ["CDE", "XYZ", "XYZ"],
...                                   ["UGH", "ABC", "CDE", "ABC"]],
...                    'Customer': ['John', 'Alex', 'Mary']})
>>> print(df["ProductList"].values.tolist())
[['ABC', 'ABC', 'CDE', 'CDF'], ['CDE', 'XYZ', 'XYZ'], ['UGH', 'ABC', 'CDE', 'ABC']]
>>> import itertools
>>> a = df["ProductList"].values.tolist()
>>> print(list(itertools.chain.from_iterable(a)))
['ABC', 'ABC', 'CDE', 'CDF', 'CDE', 'XYZ', 'XYZ', 'UGH', 'ABC', 'CDE', 'ABC']
>>> print(set(list(itertools.chain.from_iterable(a))))
{'XYZ', 'CDF', 'UGH', 'CDE', 'ABC'}