【问题标题】:Add a column according to other columns in a matrix. [python]根据矩阵中的其他列添加一列。 [Python]
【发布时间】:2021-01-15 17:54:08
【问题描述】:

我得到了一个矩阵形式:

      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

【问题讨论】:

标签: python pandas dataframe matrix multiple-columns


【解决方案1】:

让我们尝试一些不同的东西。我们可以在轴 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)

【讨论】:

    【解决方案2】:

    这必须做的工作:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您可以将矩阵转换为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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-31
          • 2022-12-17
          • 1970-01-01
          • 2022-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多