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
我有一个 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