Python: добавление столбца в кросс-таблицу на основе значения и условия - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть кросс-таблица Pandas, созданная из NumPy массивов нулей и единиц.После создания кросс-таблицы с помощью: ct = pd.crosstab(index=np.array(labels), columns=np.array(cols) у меня есть кросс-таблица, которая выглядит следующим образом:

col_0     0     1 
row_0
---------------------
0        618    53   
1        53     79

Я хотел добавить сюда столбец для процентов ошибок ложных срабатываний и ложных срабатываний.Я добавил новый столбец в кросс-таблицу, используя ct[2] = ct.apply(lambda row: row[0] + row[1], axis = 1), который добавил столбец суммы первых двух столбцов.Я хотел бы добавить четвертый столбец, который будет вычислять ct [0] [0], разделенный на сумму для первой строки, и ct [1] [1], разделенный на сумму для второй строки, и добавить этот столбец в ct[3].Я попытался:

for i,y in ct.iterrows():
   ct[3] = ct.apply(lambda y: y[i]/y[2] , axis = 1)

, но поскольку он выполняется дважды, он перезапишет столбец со вторым результатом.Я пытался использовать ct[3][i] безрезультатно.Использование lambda y: y[1] if y==0 else y[0] не работает.Каков метод добавления нового столбца в фрейм данных / кросс-таблицу с расчетом на основе условий для существующих значений?

1 Ответ

0 голосов
/ 06 февраля 2019

Попробуйте это, используя numpy и pandas:

ct[3] = (ct * np.eye(2)).sum() / ct.sum(1)

или

ct[3] = np.diag(ct) / ct.sum(1)  

Вывод:

col_0    0   1         3
row_0                   
0      618  53  0.921013
1       53  79  0.598485
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...