удалить повторяющиеся строки на основе наибольшего значения в другом столбце в Pandas df - PullRequest
0 голосов
/ 23 мая 2019

У меня есть панды df, как показано ниже

Ниже df, в индексе 0,1 & 2,3 ...... & 500,501,502 повторяющиеся значения, найденные в столбцах X & Y, и снова раунд секунд начинался с тех же повторяющихся значений в X & Столбец Y в индексе 1000, 1001 & 1002,1003 & ....1200,1201.... it goes on, но с разными весами в столбце веса.

index     x         y         weight
0         59.644    10.72     0.69
1         59.644    10.72     0.82
2         57.822    10.13     0.75
3         57.822    10.13     0.68
4         57.822    10.13     0.20
.
.
500       53.252    10.85     0.15
501       53.252    10.85     0.95
502       53.252    10.85     0.69
.
.
1000      59.644    10.72     0.85
1001      59.644    10.72     0.73
1002      57.822    10.13     0.92
1003      57.822    10.13     0.15
.
.
.
1200       53.252    10.85     0.78
1201       53.252    10.85     1.098        

Мое требование

Я бы хотел получить свою ДФ
1) Избегайте повторяющихся / повторяющихся значений строк в X & Y, значение веса которых меньше чем 0,60

2) Но все равно дубликаты в столбцах X & Y повторяются, поэтому теперь я хочу сравнить значения веса между дублирующимися строками и удалить строки, которые имеют меньший вес.

3) Если я использую приведенный ниже код, он удаляет все дубликаты между x & у

df_2.groupby(['X', 'Y'], as_index=False,sort=False)['weight'].max()

Но я хочу сравнить первые найденные дубликаты и удалить их, затем 2-й, затем 3-й и т. д., так что непрерывность дублирования значение преобладает через несколько строк. для лучшего понимания, пожалуйста, обратитесь ниже требуется df

Как должен выглядеть df:

index     x         y         weight
1         59.644    10.72     0.82
2         57.822    10.13     0.75
.
.
501      53.252    10.85      0.95
.
.
1000      59.644    10.72     0.85
.
1002      57.822    10.13     0.92
.
.
1201       53.252    10.85     1.098   
.
.

Я пытался использовать оператор if, но строка кода увеличивается. Я считаю, что должен быть альтернативный питонический способ, который облегчит это. (Встроенная функция или использование numpy) Любая помощь будет оценена.

1 Ответ

1 голос
/ 24 мая 2019

Как и @Erfan, упомянутый в комментариях, здесь необходима группировка по помощнику Series для различения последовательных групп:

x1 = df['x'].ne(df['x'].shift()).cumsum()
y1 = df['y'].ne(df['y'].shift()).cumsum()

df = df[df.groupby([x1, y1])['weight'].transform('max') == df['weight']]
print (df)
    index       x      y  weight
1       1  59.644  10.72   0.820
2       2  57.822  10.13   0.750
6     501  53.252  10.85   0.950
8    1000  59.644  10.72   0.850
10   1002  57.822  10.13   0.920
13   1201  53.252  10.85   1.098
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...