Панды сливаются по одному из двух критериевPython

Программы на Python
Ответить
Anonymous
 Панды сливаются по одному из двух критериев

Сообщение Anonymous »

У меня есть таблица/df, содержащая набор пар кода и значения. Коды представляют собой смесь старых (устаревших) и новых кодов, вызванных изменениями в процессах. У меня есть вторая таблица/df, в которой хранятся старые коды, новые коды и соответствующие настройки, т.е. как кодовая книга. Простой эквивалент выглядит так:

Код: Выделить всё

temp3 = pd.DataFrame([['A',3],['B',3],],columns=['code','value'])
temp4 = pd.DataFrame([['A', 'D', 4],['C', 'B', 5]],columns=['new_code','old_code', 'setting'])

display(temp3)
code    value
0   A   3
1   B   3

display(temp4)
new_code    old_code    setting
0   A   D   4
1   C   B   5

Я хочу объединить кодовую книгу с таблицей/df с помощью пар код/значение. Конечным результатом будет таблица, в которой каждая строка будет содержать как устаревшие, так и новые коды, значение и соответствующую настройку.
Я попробовал что-то вроде этого:

Код: Выделить всё

temp_c = (temp3
.merge(temp4, left_on='code', right_on='new_code', how= 'left')
.merge(temp4, left_on='code', right_on='old_code', how= 'left')
)
Результат:

Код: Выделить всё

    code    value   new_code_x  old_code_x  setting_x   new_code_y  old_code_y  setting_y
0   A   3   A   D   4.0 NaN NaN NaN
1   B   3   NaN NaN NaN C   B   5.0
В идеале мне бы хотелось:

Код: Выделить всё

    code    value   new_code    old_code    setting
0   A   3   A   D   4.0
1   B   3   C   B   5.0
Я попробовал использовать join_first и определить функцию применения. Можно ли это сделать, просто присоединившись или объединив?

Подробнее здесь: https://stackoverflow.com/questions/798 ... o-criteria
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»