Как оптимизировать этот тип поиска и замены в pandas

#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