Панды сбрасывают дубликаты на элементах из списков - PullRequest
0 голосов
/ 18 мая 2018

Скажите, что мой фрейм данных:

df = pandas.DataFrame([[[1,0]],[[0,0]],[[1,0]]])

, что дает:

        0
0  [1, 0]
1  [0, 0]
2  [1, 0]

Я хочу удалить дубликаты и получить только элементы [1,0] и [0,0], если я напишу:

df.drop_duplicates()

Я получаю следующую ошибку: Ошибка типа: неустранимый тип: 'список'

Как я могу вызвать drop_duplicates ()?

Еще вgeneral:

df = pandas.DataFrame([[[1,0],"a"],[[0,0],"b"],[[1,0],"c"]], columns=["list", "letter"])

И я хочу вызвать df ["list"]. drop_duplicates (), поэтому drop_duplicates применяется к серии, а не к фрейму данных?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

drop_duplicates

Позвоните drop_duplicates на повторяющихся данных:

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

        0
0  [1, 0]
1  [0, 0]

collections.OrderedDict

Однако я бы предпочел что-то, чтоне включает apply ...

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

Или

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

        0
0  [1, 0]
1  [0, 0]
0 голосов
/ 18 мая 2018

Вы можете использовать функцию 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]

Если вы хотите сохранить оформление заказа: numpy.unique с сохранением заказа

0 голосов
/ 18 мая 2018

Вот один из способов, превратив серию списков в отдельные столбцы и сохранив только недубликаты:

df[~df[0].apply(pandas.Series).duplicated()]

        0
0  [1, 0]
1  [0, 0]

Объяснение:

df[0].apply(pandas.Series) возвращает:

   0  1
0  1  0
1  0  0
2  1  0

Из которых вы можете найти дубликаты:

>>> df[0].apply(pd.Series).duplicated()
0    False
1    False
2     True

И, наконец, индексировать с помощью этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...