根据矩阵中的其他列添加一列。 [python]

Add a column according to other columns in a matrix. [python]

我得到了以下形式的矩阵:

      1.0  2.0  3.0  4.0
1      0    0    0    1
2      0    0    1    0
3      1    0    0    0
4      0    1    0    0
5      1    0    0    0
6      0    0    0    0
7      1    0    0    0

我想在矩阵中添加另一列,只有当所有其他值都为 0 时,它的值才为 1,否则为 0。所以在视觉上我想要这个:

      1.0  2.0  3.0  4.0  5.0
1      0    0    0    1   0
2      0    0    1    0   0
3      1    0    0    0   0
4      0    1    0    0   0
5      1    0    0    0   0
6      0    0    0    0   1
7      1    0    0    0   0

使用df.apply创建一个新系列,然后像这样分配:

df[5.0] = df.apply(lambda row: 1 if all(i == 0 for i in row) else 0, axis=1)

您可以将矩阵转换为 Dataframe 函数:

 matrixA = {}
 matrixA['1'] = [0, 0, 0, 1]
 matrixA['2'] = [0, 1, 0, 0]
 matrixA['3'] = [0, 0, 1, 1]
 matrixA['4'] = [0, 1, 1, 1]
 df = pd.DataFrame(matrixA)

之后添加一个 lambda 函数

df['5'] = df.apply(lambda x: 
     get_sum_of_1(list(x)),axis=1).reset_index(drop=True).copy()

计算出的行函数为:

def get_sum_of_1(row):
    return row.count(1) % 2

这必须完成工作:

df['05']=(df.sum(axis=1)==0).astype(int)

让我们尝试一些不同的东西。我们可以取太阳横轴 1 并转换为 np.sign,然后用 1 减去结果,将 0 转换为 1,将 1 转换为 0.

df['5.0'] = 1-np.sign(df.sum(1))

df.any(axis=1)

df['5.0'] = 1-df.any(1)

print(df)

   1.0  2.0  3.0  4.0  5.0
1    0    0    0    1    0
2    0    0    1    0    0
3    1    0    0    0    0
4    0    1    0    0    0
5    1    0    0    0    0
6    0    0    0    0    1
7    1    0    0    0    0

如果一行只能有一个1或更少就可以了;

df['5.0'] = 1-df.sum(1)