#python #pandas
#python #pandas
Вопрос:
У меня есть фрейм данных, который примерно выглядит следующим образом
ID VAL
2 3
2 7
2 4
2 5
2 2
3 4
3 6
3 7
3 2
4 2
4 3
4 4
4 5
4 6
Другой фрейм данных, который примерно выглядит так
ID VAL
2 5
3 7
Я хочу выполнить операцию, при которой для каждой строки во втором фрейме данных строка будет перемещаться наверх.
ID VAL
2 5
2 3
2 7
2 4
2 2
3 7
3 4
3 6
3 2
4 2
4 3
4 4
4 5
4 6
Посмотрите, что (2,5) кортеж и (3,7) кортеж были перемещены туда, где начинается этот «идентификатор».
В настоящее время у меня ужасно неэффективная реализация.
Будем признательны за любую помощь!
Комментарии:
1. Вас волнует остальная часть заказа, например, будет
2, 5 | 2, 4 | 2, 3 | 2, 7 | ...
соответствовать вашим требованиям?2. Да, остальной порядок должен быть таким же.
Ответ №1:
Я использую справочный ключ create с помощью merge
затем мы sort_values
df1.merge(df2.assign(key=0),how='left').fillna({'key':1}).sort_values(['ID','key'])
# you can add .drop('key',1) at the end :-)
ID VAL key
3 2 5 0.0
0 2 3 1.0
1 2 7 1.0
2 2 4 1.0
4 2 2 1.0
7 3 7 0.0
5 3 4 1.0
6 3 6 1.0
8 3 2 1.0
9 4 2 1.0
10 4 3 1.0
11 4 4 1.0
12 4 5 1.0
13 4 6 1.0