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

时间:2019-02-06 03:01:46

标签: python pandas numpy dataframe crosstab

我有一个从零和一的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]不起作用。通过对现有值进行基于条件的计算,将新列添加到数据框/交叉表的方法是什么?

1 个答案:

答案 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