Python:根据值和条件向交叉表添加一列

Python: Add a column to a crosstab based on value and condition

我有一个 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] 无效。将新列添加到数据框/交叉表并根据现有值进行基于条件的计算的方法是什么?

尝试使用 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