Это не удаляет дубликаты, скажем, вы просто заполняете дубликаты ключей в одном столбце как пробелы, я бы обработал это следующим образом:
путем создания маски, в которой вы возвращаете логическое значение true / false, если строка == строка выше.
при условии, что ваш фрейм данных называется df
mask = df['NAME'].ne(df['NAME'].shift())
df.loc[~mask,'NAME'] = ''
объяснение:
то, что мы делаем выше, это следующее,
сначала выбирая один столбец или, в терминологии панд, серию, мы затем применяем .ne
(не равно), который в действительности равен !=
давайте посмотрим на это в действии.
import pandas as pd
import numpy as np
# create data for dataframe
names = ['Rekha', 'Rekha','Jaya','Jaya','Sushma','Nita','Nita','Nita']
defaults = ['','','c-default','','','c-default','','']
classes = ['forth','third','foruth','fifth','fourth','third','fifth','fourth']
Теперь давайте создадим фрейм данных, аналогичный вашему.
df = pd.DataFrame({'NAME' : names,
'DEFAULT' : defaults,
'CLASS' : classes,
'AGE' : [np.random.randint(1,5) for len in names],
'GROUP' : [np.random.randint(1,5) for len in names]}) # being lazy with your age and group variables.
итак, если бы мы сделали df['NAME'].ne('Omar')
, что аналогично [df['NAME'] != 'Omar']
, мы бы получили.
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
Итак, с учетом этого, мы хотим увидеть, является ли имя в строке 1 (помните, что python - это индексный язык 0, поэтому строка 1 на самом деле является второй физической строкой) равно .eq
вышеупомянутой строке.
мы делаем это, вызывая [.shift][2]
с гиперссылкой для получения дополнительной информации.
в основном это смещение строк по индексу с определенным номером переменной, давайте назовем это n.
если мы позвоним df['NAME'].shift(1)
0 NaN
1 Rekha
2 Rekha
3 Jaya
4 Jaya
5 Sushma
6 Nita
7 Nita
Здесь мы видим, что эта Реха опустилась
так что все это вместе,
df['NAME'].ne(df['NAME'].shift())
0 True
1 False
2 True
3 False
4 True
5 True
6 False
7 False
мы присваиваем это собственной переменной mask
, которую вы можете называть как хотите.
затем мы используем [.loc][2]
, который позволяет вам получить доступ к вашему фрейму данных с помощью меток или логического массива, в данном случае массива.
однако мы хотим получить доступ только к логическим значениям False, поэтому мы используем ~
, который инвертирует логику нашего массива.
NAME DEFAULT CLASS AGE GROUP
1 Rekha third 1 4
3 Jaya fifth 1 1
6 Nita fifth 1 2
7 Nita fourth 1 4
все, что нам нужно сделать сейчас, это заменить эти строки пробелами в качестве вашего начального требования, и нам осталось.
NAME DEFAULT CLASS AGE GROUP
0 Rekha forth 2 2
1 third 1 4
2 Jaya c-default forth 3 3
3 fifth 1 1
4 Sushma fourth3 1
5 Nita c-default third 4 2
6 fifth 1 2
7 fourth1 4
надеюсь, это поможет!