Python:从列表中提取列表并删除重复项

时间:2017-10-19 16:57:50

标签: python list dataframe

我有一个数据框,其列包含列表(不同长度)列表。 一个例子: 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,)一起广播”

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您可以使用以下一个衬垫来获得结果。

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, [])) =递归地添加累加器和变量列表以将其缩减为单个列表。