我有一个从零和一的NumPy数组创建的Pandas交叉表。通过以下方式创建交叉表之后: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]
不起作用。通过对现有值进行基于条件的计算,将新列添加到数据框/交叉表的方法是什么?
答案 0 :(得分: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