Удаление повторяющихся / повторяющихся вхождений в Excel с использованием Python - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь удалить повторяющиеся / повторяющиеся имена, указанные в столбце ИМЯ. Я просто хочу сохранить первое вхождение из повторяющихся / повторяющихся имен с помощью скрипта Python.

Это мой вход Excel:

input

И нужно выводить вот так:

output

1 Ответ

3 голосов
/ 06 июля 2019

Это не удаляет дубликаты, скажем, вы просто заполняете дубликаты ключей в одном столбце как пробелы, я бы обработал это следующим образом:

путем создания маски, в которой вы возвращаете логическое значение 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

надеюсь, это поможет!

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