具有列表值的列,如果列表具有超过 1 个元素,则解码这两个值并包含在新列的同一行中的列表中

Posted

技术标签:

【中文标题】具有列表值的列,如果列表具有超过 1 个元素,则解码这两个值并包含在新列的同一行中的列表中【英文标题】:Column with list values, if list has more than 1 element, decode both values and include in a list in the same row in new column 【发布时间】:2022-01-18 04:43:22 【问题描述】:

我有两列 cat_1 和 cat_2,其中的值有乱码。这是因为我将引用一个 python 库来从那些乱码值中获取信息。

如果列表在一行中有超过 1 个元素,无论是在 cat_1 还是 cat_2,我想继续填充新列 results_1 或 results_2 的行,其值用逗号分隔。示例如下。

如何从 cat_1 和 cat_2... 到 results_1 和 results_2?

【问题讨论】:

【参考方案1】:

您需要某种映射器词典来告诉我们哪个乱码单词是哪个英语单词。比如:

mapper = 'klys': 'apple', 'chrs': 'orange', 'pqor': 'bag'

有了这样的映射器,您可以:

df[['results_1','results_2']] = df[['cat_1','cat_2']].stack().str.split(', ').explode().map(mapper).fillna('').groupby(level=[0,1]).apply(lambda x: list(x) if len(x)>1 else (x.values[0] if len(x)==1 else '')).unstack()

【讨论】:

以上是关于具有列表值的列,如果列表具有超过 1 个元素,则解码这两个值并包含在新列的同一行中的列表中的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark/SQL 将具有列表值的列连接到另一个数据框列

无法发布具有许多(超过 256 个)值的表单

具有表示集合列表的字符串值的列,将相关信息提取到新列

Python列表查找具有接近值的元素

如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列

查找是不是在列表中找到具有特定属性值的元素