Как удалить все повторяющиеся вхождения или получить уникальные значения в кадре данных pandas? - PullRequest
1 голос
/ 02 апреля 2019

У меня есть пандас-фрейм данных с несколькими вхождениями определенных значений.Я хочу либо удалить все значения, которые являются дубликатами, либо заменить на NaN и, наконец, получить имя столбца, который имеет любое количество уникальных значений.Функция drop_duplicates для Pandas удаляет только те строки, которые имеют повторяющиеся значения, но я хочу удалить значения / ячейки в фрейме данных.Есть ли решение для этого?

Исходя из приведенного ниже входного кадра данных, все значения, кроме первой строки столбца "02", имеют двойное вхождение в кадре данных, поэтому мне нужен столбец "02".Если вопрос не ясен, пожалуйста, дайте мне знать.Спасибо.

DF: 02 03:10 03:02 03:02:09 0 6716 45355 45355 45355 1 4047 4047 7411 7411 2 945 2478 2478 945
Ожидаемый результат: col_with_unique_val = "02"

или

Expected output DF: 
      02  03:10  03:02  03:02:09
  0  6716  NaN NaN NaN 
  1  NaN NaN NaN NaN 
  2  NaN NaN NaN NaN 

или

Expected output DF: 
    02
0  6716

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Вот один из способов

df.mask(df.apply(pd.Series.duplicated,keep=False,axis=1))
       02  03:10  03:02  03:02:09
0  6716.0    NaN    NaN       NaN
1     NaN    NaN    NaN       NaN
2     NaN    NaN    NaN       NaN

df.mask(df.apply(pd.Series.duplicated,keep=False,axis=1)).stack().index.get_level_values(1)
Index(['02'], dtype='object')
2 голосов
/ 02 апреля 2019

stack, затем проверьте дубликат. where чтобы сделать все неуникальные NaN

df1 = df.stack()
uniques = df1[~df1.duplicated(keep=False)].tolist()

df.where(df.isin(uniques))
#       02  03:10  03:02  03:02:09
#0  6716.0    NaN    NaN       NaN
#1     NaN    NaN    NaN       NaN
#2     NaN    NaN    NaN       NaN

df.isin(uniques).any().loc[lambda x: x].index
#Index(['02'], dtype='object')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...