【问题标题】:Python: Extract list from inside the list and remove duplicatesPython:从列表中提取列表并删除重复项
【发布时间】:2017-10-19 16:57:50
【问题描述】:

我有一个数据框,其中有一列由列表列表(长度不同)组成。 一个例子: df['east'][0]给了

[array(['Indonesia', 'New Zealand'], dtype=object), array(['Indonesia', 'New Zealand'], dtype=object)]

我想合并这个更大列表中的列表,并消除重复项,并确保数据清晰呈现,即简单

['Indonesia', 'New Zealand']

我尝试some suggestions from here 删除重复项,但是,例如,对于np.unique(functools.reduce(operator.add, east)),Python 说“ValueError:操作数无法与形状 (4,) (13,) 一起广播”

我通常可以解决问题,但在这里我不确定发生了什么 - 列表中的这些数组是什么。

【问题讨论】:

  • 从列表中删除重复项很容易:将其转换为集合,如果需要转换回列表:` a=[1,2,2,3] b=[set(a)] print(b ) ` 结果 b 将是 [1,2,3]

标签: python list dataframe


【解决方案1】:

一种简单的方法是使用推导来展平您的列表/数组,然后使用 list(set()) 获取列表中的唯一值:

df['east'].apply(lambda x: list(set(item for sublist in x for item in sublist)))
# example output: ['New Zealand', 'Indonesia']

【讨论】:

  • 主要在 python 中,([ 很好,但不漂亮。你可以做set(item for sublist in x for item in sublist)。然后,您不会创建一个立即丢弃的中间列表。
  • 很高兴您考虑到了这一点。你已经得到了我的支持,因为无论如何这是一个很好的答案。
【解决方案2】:

您可以使用以下一种方法来实现您的结果。

df['east'].apply(lambda value: reduce(lambda a, x: list(set(list(a) + list(x))), value, []))

让我们分解一下...

list(a) + list(x) = 避免形状错误并添加到列表以返回一个列表(如果您保持形状相同,您可以直接使用添加 np 数组)

list(set(list(a) + list(x))) = 首先获取所有唯一元素的集合。

reduce(lambda a, x: list(set(list(a) + list(x))), value, [])) = 递归地添加累加器和变量列表以将其缩减为一个列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2012-07-11
    • 2019-01-25
    • 2011-09-29
    相关资源
    最近更新 更多