У меня есть таблица коэффициентов и других значений из GLM. Я хотел бы закодировать функцию, которая сбрасывает коэффициенты до значения, выбранного мной. Таким образом, если значение ссылки / единицы для франшизы находится в 0, а я хочу его в 500, эта функция будет проходить и делить каждый коэффициент для этой переменной на любой коэффициент в 500.
Вот пример кода:
df3 = {'variable': ['intercept', 'CLded_model','CLded_model','CLded_model','CLded_model','CLded_model','CLded_model','CLded_model'
,'married_age','married_age','married_age', 'class_cc', 'class_cc', 'class_cc', 'class_cc', 'class_v_age'
,'class_v_age','class_v_age', 'class_v_age'],
'level': [None,0,100,200,250,500,750,1000, 60, 61, 62, 100, 1200, 1500, 100
,10, 20, 15, 10],
'value': [None, 460955.7793,955735.0532,586308.4028,12216916.67,48401773.87,1477842.472,14587994.92,10493740.36,36388470.44
,31805316.37, 123.4, 4546.50, 439854.23, 2134.4, 2304.5, 2032.30, 159.80, 22],
'coefficient': [-2.36E-14, 0.00174356, 0.00174356, 0.00174356, 0.00174356, 0.00174356 ,0.00174356 , 0.00174356
,-1.004648e-02, -1.004648e-02,-1.071730e-02,-1.812330e-04,-1.812330e-04,8.727980e-04,1.402564e-03
,-1.681685e-01, -8.442040e-02, -1.812330e-04, -1.465950e-01]}
results = pd.DataFrame(df3)
results['factor'] = results['level']*results['coefficient']
results
def rebase(df, variable1, unity_value):
"""
rebase the factors according to where the modeler wants the unity to be
"""
df['factor_rebased'] = ""
base_factor = df[(df['variable'] == variable1) & (df['level'] == unity_value)]['coefficient']
if df['variable'].any() == variable1:
df['factor_rebased'] = df['coefficient']/base_factor
return df['factor_rebased']
rebase(results, 'CLded_model', 500)
Результат - пустая серия. В результате я хочу получить новый столбец с именем factor_rebased
, где я могу перезапустить эту функцию в цикле для каждой уникальной переменной и не сохранять перебазированное значение над собой.
Результат идеального первого раунда должен выглядеть следующим образом: бегущая ребазировка (results, 'CLded_model', 500) делит каждый фактор переменной CLded_model
на 2,391 (коэффициент для уровня 500):
df3 = {'variable': ['intercept', 'CLded_model','CLded_model','CLded_model','CLded_model','CLded_model','CLded_model','CLded_model'
,'married_age','married_age','married_age', 'class_cc', 'class_cc', 'class_cc', 'class_cc', 'class_v_age'
,'class_v_age','class_v_age', 'class_v_age'],
'level': [None,0,100,200,250,500,750,1000, 60, 61, 62, 100, 1200, 1500, 100
,10, 20, 15, 10],
'value': [None, 460955.7793,955735.0532,586308.4028,12216916.67,48401773.87,1477842.472,14587994.92,10493740.36,36388470.44
,31805316.37, 123.4, 4546.50, 439854.23, 2134.4, 2304.5, 2032.30, 159.80, 22],
'coefficient': [-2.36E-14, 0.00174356, 0.00174356, 0.00174356, 0.00174356, 0.00174356 ,0.00174356 , 0.00174356
,-1.004648e-02, -1.004648e-02,-1.071730e-02,-1.812330e-04,-1.812330e-04,8.727980e-04,1.402564e-03
,-1.681685e-01, -8.442040e-02, -1.812330e-04, -1.465950e-01],
'factor': [ None, 1. , 1.1904793 , 1.41724097, 1.54633869,
2.39116334, 3.69754838, 5.71766211, 0.54728324, 0.5418125 ,
0.51454483, 0.98203994, 0.80454402, 3.70319885, 1.15056877,
0.1860602 , 0.18481351, 0.9972852 , 0.23085857],
'factor_rebased':[None, .418, .592, .647, 1, 1.660, 2.391, None,None,None,None,None,None,None,None,None,None,None,None]}
results = pd.DataFrame(df3)
results
Второй раунд выполнения этого цикла (цикл является циклом) будет таким, когда все коэффициенты замужнего возраста делятся на .5418 - коэффициент для возраста 60 лет:
df3 = {'variable': ['intercept', 'CLded_model','CLded_model','CLded_model','CLded_model','CLded_model','CLded_model','CLded_model'
,'married_age','married_age','married_age', 'class_cc', 'class_cc', 'class_cc', 'class_cc', 'class_v_age'
,'class_v_age','class_v_age', 'class_v_age'],
'level': [None,0,100,200,250,500,750,1000, 60, 61, 62, 100, 1200, 1500, 100
,10, 20, 15, 10],
'value': [None, 460955.7793,955735.0532,586308.4028,12216916.67,48401773.87,1477842.472,14587994.92,10493740.36,36388470.44
,31805316.37, 123.4, 4546.50, 439854.23, 2134.4, 2304.5, 2032.30, 159.80, 22],
'coefficient': [-2.36E-14, 0.00174356, 0.00174356, 0.00174356, 0.00174356, 0.00174356 ,0.00174356 , 0.00174356
,-1.004648e-02, -1.004648e-02,-1.071730e-02,-1.812330e-04,-1.812330e-04,8.727980e-04,1.402564e-03
,-1.681685e-01, -8.442040e-02, -1.812330e-04, -1.465950e-01],
'factor': [ None, 1. , 1.1904793 , 1.41724097, 1.54633869,
2.39116334, 3.69754838, 5.71766211, 0.54728324, 0.5418125 ,
0.51454483, 0.98203994, 0.80454402, 3.70319885, 1.15056877,
0.1860602 , 0.18481351, 0.9972852 , 0.23085857],
'factor_rebased':[None, .418, .592, .647, 1, 1.660, 2.391, 1.01,1,.99,None,None,None,None,None,None,None,None,None]}
results = pd.DataFrame(df3)
#results['factor'] = np.exp(results['level']*results['coefficient'])
results
Так что я не уверен, почему я получаю пустую серию. Спасибо за любую помощь, которую может оказать сообщество.