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

Python:根据值和条件向交叉表添加列,python,pandas,numpy,dataframe,crosstab,Python,Pandas,Numpy,Dataframe,Crosstab,我有一个由0和1组成的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]

我有一个由0和1组成的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]
但没有效果。如果y==0,则使用
lambda y:y[1],否则使用y[0]
不起作用。使用基于现有值的条件计算向数据框/交叉表添加新列的方法是什么?

使用numpy和pandas尝试此操作:

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

输出:

col_0    0   1         3
row_0                   
0      618  53  0.921013
1       53  79  0.598485

使用numpy和pandas尝试此操作:

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

输出:

col_0    0   1         3
row_0                   
0      618  53  0.921013
1       53  79  0.598485

您的预期输出数据帧是什么样子的?我的预期结果将有两个附加列,第一个附加列是前两个现有列的总和,第二个是第一行[0][0]除以[1][1]所得的百分比在第二行。您的答案正是我所想的!您预期的输出数据帧是什么样子的?我预期的结果将有两个额外的列,第一个额外的列是前两个现有列的总和,第二个是第一行中[0][0]除以[1][1]所得的百分比在第二排。你的答案正是我想要的!