Я хочу сгенерировать весовые коэффициенты с помощью группирования для данных, которые изначально выглядят так:
V1 V2 MONTH CHOICES PRIORITY
X T1 M1 C1 1
X T1 M1 C2 0
X T1 M1 C3 0
X T2 M1 C1 1
X T2 M1 C5 0
X T2 M1 C6 0
X T2 M1 C2 1
X T1 M2 C1 1
X T1 M2 C2 0
X T1 M2 C3 0
X T2 M2 C1 0
X T2 M2 C5 1
X T2 M2 C6 0
X T2 M2 C2 1
По сути, когда MONTH отличается от M1, я хочу иметь отмеченные варианты выбора с весами, равными удвоенному значению любого не отмеченного значения.
Пример: если у вас есть (C1, C2, C3) и C1 помечен только один, веса будут: 0,5 / 0,25 / 0,25.
В то же время, в течение первого месяца, я хочу, чтобы веса были сосредоточены исключительно на отмеченных вариантах. Предыдущий пример станет (1/0/0).
Точность о данных:
Для данного кортежа (V1, V2, MONTH) у нас может быть не более двух вариантов, помеченных как приоритетные (вообще нет приоритета).
Вот что я пробовал:
def weights_preferences(data):
if (data.MONTH.values != 'M1'):
data['WEIGHTS'] = 1/(len(data)+data[data.PRIORITY==1].shape[0])
data['WEIGHTS'] = data.apply(lambda x : 2*x.WEIGHTS if x.PRIORITY==1 else x.WEIGHTS, axis=1)
elif data.MONTH.values == 'M1' & data[data.PRIORITY==1].shape[0]==0 :
data['WEIGHTS'] = 1/(len(data))
else :
if data[data.PREFERENCE==1].shape[0]==1 :
data['WEIGHTS'] = [1 if x[1].PRIORITY==1 else 0 for x in data.iterrows()]
else :
data['WEIGHTS'] = [0.5 if x[1].PRIORITY==1 else 0 for x in data.iterrows()]
return data
tmp = tmp.groupby(['V1','V2','MONTH']).apply(weights_preferences)
Проблема в том, что, поскольку я группирую по «МЕСЯЦ», кажется, что значение больше не появляется в данных, к которым применяется «weights_preferences».
P.S .: Вывод будет выглядеть так
V1 V2 MONTH CHOICES PRIORITY WEIGHTS
X T1 M1 C1 1 1
X T1 M1 C2 0 0
X T1 M1 C3 0 0
X T2 M1 C1 1 0.5
X T2 M1 C5 0 0
X T2 M1 C6 0 0
X T2 M1 C2 1 0.5
X T1 M2 C1 1 0.5
X T1 M2 C2 0 0.25
X T1 M2 C3 0 0.25
X T2 M2 C1 0 0.16
X T2 M2 C5 1 0.33
X T2 M2 C6 0 0.16
X T2 M2 C2 1 0.33
Любые предложения приветствуются!
Спасибо.