pandas: присоединиться к фрейму данных при условии в следующей строке

#pandas

Вопрос:

У меня есть фрейм данных pandas df1, который следует хронологическому порядку, где «id» уникален:

 df1 = pd.DataFrame([[0, 17], [1, 5], [2, 11], [3, 15], [4, 10]], columns = ['seq', 'id'])

seq    id
  0    17
  1     5
  2    11
  3    15
  4    10
 

Мне нужно объединить данные из другого фрейма данных df2, где «id» может появляться много раз в столбце «id_1», но где комбинация id1-id2 уникальна:

 df2 = pd.DataFrame([[17, 7, 'a'], [17, 5, 'b'], [17, 8, 'c'], [5, 4, 'd'], [5, 11, 'e'], [11, 9, 'f'], [11, 15, 'g'], [15, 21, 'h'], [15, 10, 'i']], columns = ['id_1', 'id_2', 'x1'])

id_1   id_2    x1
  17      7     a
  17      5     b
  17      8     c
   5      4     d
   5     11     e
  11      9     f
  11     15     g
  15     21     h
  15     10     i
 

Результат, присоединенный к df1, должен основываться на следующей строке. Например, для первой строки, где seq = 0, данные из df2 должны быть объединены, только если id_1 = id amp; id_2 = id в следующей строке при seq = 1. Конечный результат должен быть таким:

 seq    id    x1
  0    17     b
  1     5     e
  2    11     g
  3    15     i
  4    10
 

Есть идеи, как этого добиться?

Комментарии:

1. Вы можете использовать Shift , чтобы выстроить необходимые столбцы в ряд, а затем объединить исходный столбец и сдвинутый.

2. Решение Лиама, вероятно, лучшее. Создайте новый столбец: df1['id_2'] = df1['id'].shift(-1) и они объединяются id_1 , id_2 .

3. Спасибо за идею, отлично работает!