我有一个数组:

array([nan, 'Stressful day', 'Drank coffee:Drank tea', 'Drank tea',
       'Ate late:Drank coffee', 'Drank coffee:Drank tea:Worked out',
       'Drank tea:Worked out', 'Drank coffee:Drank tea:Stressful day',
       'Drank coffee', 'Drank coffee:Drank tea:Stressful day:Worked out',
       'Drank coffee:Worked out', 'Ate late:Drank coffee:Drank tea',
       'Ate late:Drank coffee:Drank tea:Worked out',
       'Drank tea:Stressful day', 'Drank tea:Stressful day:Worked out',
       'Drank coffee:Stressful day:Worked out',
       'Drank coffee:Stressful day',
       'Ate late:Drank coffee:Drank tea:Stressful day', 'Worked out',
       'Ate late:Drank coffee:Worked out'], dtype=object)

这些是来自数据帧的列的唯一值,

正如你所看到的,它们是其他价值观的组合,比如‘喝咖啡:喝茶’是‘喝咖啡’和‘喝茶’的组合.我想让这些独特的元素出现在这份 list 中.

创建这份 list 最快的方法是什么?在Python库中有没有针对这类事情的内置函数?

预期输出:

array([nan, 'Stressful day', 'Drank coffee', 'Drank tea', 'Ate late',
       'Worked out'], dtype=object)

推荐答案

假设输入数组为a,则可以使用str.extractall:

out = pd.Series(a).str.extractall('([^:]+)')[0].unique()

在最初的s系列中:

out = s.unique().drop_duplicates().str.extractall('([^:]+)')[0].unique()

输出:

array(['Stressful day', 'Drank coffee', 'Drank tea', 'Ate late',
       'Worked out'], dtype=object)

其他选项(可能效率较低):

out = set(x for s in a if isinstance(s, str) for x in s.split(':'))

out = pd.Series(a).str.split(':').explode().unique()
keeping NaNs:
s = pd.Series(a)
out = np.concatenate([s[s.isna()].unique(),
                      s.str.extractall('([^:]+)')[0].unique()])

输出:

array([nan, 'Stressful day', 'Drank coffee', 'Drank tea', 'Ate late',
       'Worked out'], dtype=object)

或者:

out = set(x for s in a for x in (s.split(':') if isinstance(s, str) else [s]))

输出:

{'Drank coffee', 'Drank tea', nan, 'Stressful day', 'Worked out', 'Ate late'}

Python相关问答推荐

将数组操作转化为纯numpy方法

带有计数值的Pandas数据帧

ValueRight:参数目标和输出必须具有相同的形状.接收:目标.形状=(无,512),输出.形状=(无,3)

将numpy数组与空数组相加

如果AST请求默认受csref保护,那么在Django中使用@ system_decorator(csref_protect)的目的是什么?

使用Beautiful Soup获取第二个srcset属性

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

Python -Polars库中的滚动索引?

从包含数字和单词的文件中读取和获取数据集

删除最后一个pip安装的包

可变参数数量的重载类型(args或kwargs)

将输入管道传输到正在运行的Python脚本中

如何在polars(pythonapi)中解构嵌套 struct ?

使用setuptools pyproject.toml和自定义目录树构建PyPi包

我们可以为Flask模型中的id字段主键设置默认uuid吗

ThreadPoolExecutor和单个线程的超时

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

当点击tkinter菜单而不是菜单选项时,如何执行命令?

Polars asof在下一个可用日期加入

启动带有参数的Python NTFS会导致文件路径混乱