#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. Спасибо за идею, отлично работает!