Похоже, вы должны иметь возможность присоединиться к измененной версии ext_map
до df
, чтобы сделать это. Здесь есть хорошая документация: https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
Примерный пример (возможно, есть более краткий способ сделать это):
Вы можете развернуть данные из широкого формата в длинный формат (перечисление каждой комбинации true
и genre
) с использованием pd.melt()
temp = ext_map.melt(id_vars=['label'], value_vars=['a', 'b', 'c'], var_name='genre', value_name = 'new_col')
, что дает следующий результат:
label genre new_col
0 1 a 1.1
1 2 a 1.2
2 3 a 1.3
3 1 b 2.1
4 2 b 2.2
5 3 b 2.3
6 1 c 3.1
7 2 c 3.2
8 3 c 3.3
Затем используйте pd.merge()
для присоединитесь к фреймам данных, используя метод поиска, который вы упомянули:
df.merge(temp, left_on = ['true', 'genre'], right_on = ['label', 'variable'])
, что даст вам этот результат:
true billed genre label variable new_col
0 1 4 a 1 a 1.1
1 2 5 b 2 b 2.2
2 3 6 c 3 c 3.3