сортировка данных и сохранение только первых указанных c номеров строк с условием - PullRequest
1 голос
/ 18 марта 2020

если у меня есть фрейм данных, созданный из этих списков:

users= ['user 1','user 1','user 1','user 1','user 1','user 1',
        'user 2','user 2','user 2','user 2','user 2','user 2',
        'user 3','user 3','user 3','user 3','user 3','user 3']

control_users= ['c_user 01','c_user 02','c_user 03','c_user 04','c_user 05','c_user 06',
                'c_user 01','c_user 02','c_user 03','c_user 04','c_user 05','c_user 06',
                'c_user 01','c_user 02','c_user 03','c_user 04','c_user 05','c_user 06']

distance = [0.51, 0.62, 0.62, 0.05, 0.56, 0.64, 0.55, 0.23, 0.92, 
            0.02, 0.56, 0.65, 0.24, 0.55, 0.66, 0.11, 0.98, 0.99]

import pandas as pd
df = pd.DataFrame(list(zip(users,control_users,distance)),columns=['users','control_users','distance'])

фрейм данных:

     users control_users  distance
0   user 1     c_user 01      0.51
1   user 1     c_user 02      0.62
2   user 1     c_user 03      0.62
3   user 1     c_user 04      0.05
4   user 1     c_user 05      0.56
5   user 1     c_user 06      0.64
6   user 2     c_user 01      0.55
7   user 2     c_user 02      0.23
8   user 2     c_user 03      0.92
9   user 2     c_user 04      0.02
10  user 2     c_user 05      0.56
11  user 2     c_user 06      0.65
12  user 3     c_user 01      0.24
13  user 3     c_user 02      0.55
14  user 3     c_user 03      0.66
15  user 3     c_user 04      0.11
16  user 3     c_user 05      0.98
17  user 3     c_user 06      0.99

Если я хочу отсортировать фрейм данных с 2 условиями: оставьте только первые 2 строки каждого пользователя и управляющих пользователей не повторяются.

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

И если расстояние между многими парами равно, пользователь с наименьшим индексным номером будет иметь приоритет, чтобы сначала получить управляющего пользователя.

результат должен выглядеть следующим образом:

     users control_users  distance
9   user 2     c_user 04      0.02
7   user 2     c_user 02      0.23
12  user 3     c_user 01      0.24
4   user 1     c_user 05      0.56
2   user 1     c_user 03      0.62
14  user 3     c_user 03      0.66

Я только знаю, как его отсортировать:

df.sort_values(by=['distance'],ascending=True)

Как я могу это сделать? Заранее спасибо

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