Удалить дублирующиеся значения в Пандах - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть такой фрейм данных

id   col1 

2   T 

2   T 

4   R

4   T

6   G

6   G

Я хочу дедуплицировать следующим образом:

Если у меня T и T для одного и того же идентификатора, я хочу сохранить 2 строки

Если у меня есть G или R и G или R для одного и того же идентификатора, я хочу сохранить 2 строки

Если у меня есть T и (G или R) для одного и того же IT, я просто хочу сохранитьстрока с T (удалить одну из двух строк)

Я хочу этот результат :)

id   col1 

2   T 

2   T 

4   T

6   G

6   G

Спасибо:)

1 Ответ

0 голосов
/ 12 декабря 2018

Используйте boolean indexing для фильтрации:

m1 = df['col1'].eq('T')
m2 = m1.groupby(df['id']).transform('sum').ne(1)
df = df[m1 | m2 ]
print (df)
   id col1
0   2    T
1   2    T
3   4    T
4   6    G
5   6    G

Объяснение :

Сравните col1 для T с eq (==):

m1 = df['col1'].eq('T')
print (m1)
0     True
1     True
2    False
3     True
4    False
5    False
Name: col1, dtype: bool

Количество True значений для групп по transform с sum:

print (m1.groupby(df['id']).transform('sum'))
0    2.0
1    2.0
2    1.0
3    1.0
4    0.0
5    0.0
Name: col1, dtype: float64

Сравните для не равных на ne (!=):

m2 = m1.groupby(df['id']).transform('sum').ne(1)
print (m2)
0     True
1     True
2    False
3    False
4     True
5     True
Name: col1, dtype: bool

И соедините вместе | для побитового ИЛИ:

print (m1 | m2)
0     True
1     True
2    False
3     True
4     True
5     True
Name: col1, dtype: bool
...