Я изо всех сил пытаюсь создать новый столбец в моем фрейме данных, который будет результатом прохождения каждой строки фрейма данных и вычисления среднего значения на основе некоторых условий.
Вот так выглядит фрейм данных
ID, 1_a, 1_b, 1_c, 2_a, 2_b, 2_c, 3_a, 3_b, 3_c
0, 0, 145, 0.8, 0, 555, 0.7, 1, 335, 0.7
1, 1, 222, 0.9, 1, 224, 0.4, 1, 555, 0.6
3, 1, 111, 0.3, 0, 222, 0.5, 1, 999, 0.7
Я надеюсь получить следующий результат:
ID, 1_a, 1_b, 1_c, 2_a, 2_b, 2_c, 3_a, 3_b, 3_c, NEW
0, 0, 145, 0.8, 0, 555, 0.7, 1, 335, 0.7, 0.7
1, 1, 222, 0.8, 1, 224, 0.4, 1, 555, 0.6, 0.6
3, 1, 111, 0.3, 0, 222, 0.5, 1, 999, 0.7, 0.5
Логика следующая.
If 1_a is 1, keep value in 1_c, if not ignore
If 2_a is 1, keep value in 2_c, if not ignore
If 3_a is 1, keep value in 3_c, if not ignore
рассчитать среднее значение сохраненных значений для каждой строки и сохранить в столбце 'NEW'
Я пробовал несколько способов, но это работает, только если у меня есть только 1 строка во фрейме данных. Если у меня есть более 1 строки, кажется, что рассчитать среднее значение для всего фрейма данных.
Кроме того, я пытаюсь оптимизировать функцию, поскольку у меня есть более 10 из этих условий ЕСЛИ.
Это то, что я пытался, но это не дает мне результат, я ищу:
def test(x):
a = x[x['1_a']==1]['1_c'].values
b = x[x['2_a']==1]['2_c'].values
c = x[x['3_a']==1]['3_c'].values
xx =np.concatenate((a,b,c), axis=0)
z = sum(xx)/len(xx)
x['New_Prob'] = z
return x
print(test(df))
Результат примерно такой:
ID, 1_a, 1_b, 1_c, 2_a, 2_b, 2_c, 3_a, 3_b, 3_c, NEW
0, 0, 145, 0.8, 0, 555, 0.7, 1, 335, 0.7, 0.6
1, 1, 222, 0.8, 1, 224, 0.4, 1, 555, 0.6, 0.6
3, 1, 111, 0.3, 0, 222, 0.5, 1, 999, 0.7, 0.6