根据矩阵中的其他列添加一列。 [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)
我得到了以下形式的矩阵:
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)