熊猫在由列表组成的元素上放置重复项

use*_*ser 3 python python-3.x pandas

说我的数据框是:

df = pandas.DataFrame([[[1,0]],[[0,0]],[[1,0]]])
Run Code Online (Sandbox Code Playgroud)

产生:

        0
0  [1, 0]
1  [0, 0]
2  [1, 0]
Run Code Online (Sandbox Code Playgroud)

我想删除重复项,并且只写以下内容:[1,0]和[0,0]:

df.drop_duplicates()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:TypeError:不可哈希类型:'列表'

如何调用drop_duplicates()?

一般而言:

df = pandas.DataFrame([[[1,0],"a"],[[0,0],"b"],[[1,0],"c"]], columns=["list", "letter"])
Run Code Online (Sandbox Code Playgroud)

我想调用df [“ list”]。drop_duplicates(),所以drop_duplicates适用于Series而不是数据框?

And*_*eas 9

我尝试了其他答案,但它们没有解决我需要的问题(具有多个列表列的大型数据框)。

我是这样解决的:

df = df[~df.astype(str).duplicated()]
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 7

drop_duplicates

调用drop_duplicates元组化数据:

df[0].apply(tuple, 1).drop_duplicates().apply(list).to_frame()

        0
0  [1, 0]
1  [0, 0]
Run Code Online (Sandbox Code Playgroud)

collections.OrderedDict

但是,我更喜欢不涉及的东西apply......

from collections import OrderedDict
pd.Series(map(
    list, (OrderedDict.fromkeys(map(tuple, df[0].tolist()))))
).to_frame()
Run Code Online (Sandbox Code Playgroud)

或者,

pd.Series(
    list(k) for k in OrderedDict.fromkeys(map(tuple, df[0].tolist()))
).to_frame()
Run Code Online (Sandbox Code Playgroud)

        0
0  [1, 0]
1  [0, 0]
Run Code Online (Sandbox Code Playgroud)


Kas*_*mvd 5

您可以使用numpy.unique()功能:

>>> df = pandas.DataFrame([[[1,0]],[[0,0]],[[1,0]]])
>>> pandas.DataFrame(np.unique(df), columns=df.columns)
        0
0  [0, 0]
1  [1, 0]
Run Code Online (Sandbox Code Playgroud)

如果要保留订单结帐:numpy.unique,保留订单