если у меня есть фрейм данных, созданный из этих списков:
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)
Как я могу это сделать? Заранее спасибо