Загрузка фреймов данных
df_states = pd.DataFrame({'state':['Texas','Pennsylvania','California','Texas'],'code':[0,0,1,2], 'score':[0.753549,0.998119,0.125751,0.12575]})
state_lookup = pd.DataFrame({'state':['Texas','Pennsylvania','California'],'code_0': [2014,2015,2014],'code_1': [2015,2016,2017] , 'code_2': [2019,2017,2019]})
Первое использование melt
для преобразования ваших code_
столбцов в строки
melted_lookup = pd.melt(state_lookup,
id_vars=['state'],
value_vars=[col for col in state_lookup.columns if col.startswith('code_')],
var_name='new_code',
value_name='year')
Затем объединение двух фреймов данных:
df_states['new_code'] = "code_"+ df_states.code.astype('str')
df_states = pd.merge(df_states, melted_lookup, how = 'left', on =['new_code','state'])
# state code score new_code year
#0 Texas 0 0.753549 code_0 2014
#1 Pennsylvania 0 0.998119 code_0 2015
#2 California 1 0.125751 code_1 2017
#3 Texas 2 0.125750 code_2 2019