【问题标题】:efficient way to make an array unique by column使数组按列唯一的有效方法
【发布时间】:2020-12-16 15:24:42
【问题描述】:

假设我们有一个二维数组,如下所示:

array1 = np.array([[1,4,3, 64356,5435,434],
                   [11,46,3, 7356,585,74],
                   [51,406,3, 769,5435,24],
                   [12,45,5, 656,135,134],
                   [112,475,5, 656,1385,134],
                   [13,46,  5, 656,1385,19]])

第 4 行和第 5 行在术语或它们的 2,3,4 列方面不是唯一的,我们希望删除其中之一。 有没有一种有效的方法来删除数组的行并使其行在所选列方面是唯一的?

【问题讨论】:

  • @QuangHoang 但不允许按列进行选择性。
  • array1[:,your_select_column] 上工作并获取索引?
  • 如果使用 pandas 是一个选项。您可以将数组转换为数据框并使用drop_duplicates 函数,该函数接受用于选择列的subset 参数
  • pd.DataFrame(array1).drop_duplicates(your_select_column)?

标签: python arrays numpy unique


【解决方案1】:

纯 numpy 中的解决方案:

_, idx = np.unique(array1[:,[2,3,4]], axis=0, return_index=True)
array1[sorted(idx)]

输出:

array([[    1,     4,     3, 64356,  5435,   434],
       [   11,    46,     3,  7356,   585,    74],
       [   51,   406,     3,   769,  5435,    24],
       [   12,    45,     5,   656,   135,   134],
       [  112,   475,     5,   656,  1385,   134]])

【讨论】:

    【解决方案2】:

    按照 S.Mohsen 的建议转换为 pandas 并返回

    代码:

    import pandas as pd
    import numpy as np
    
    array1 = np.array([[1,4,3, 64356,5435,434],
                       [11,46,3, 7356,585,74],
                       [51,406,3, 769,5435,24],
                       [12,45,5, 656,135,134],
                       [112,475,5, 656,1385,134],
                       [13,46,  5, 656,1385,19]])
                       
    df = pd.DataFrame(data=array1)
    print(df)
    df.drop_duplicates(subset=[2,3],inplace=True)
    print(df)
    
    array2=df.values
    print(array2)
    

    输出:

         0    1  2      3     4    5
    0    1    4  3  64356  5435  434
    1   11   46  3   7356   585   74
    2   51  406  3    769  5435   24
    3   12   45  5    656   135  134
    4  112  475  5    656  1385  134
    5   13   46  5    656  1385   19
    
        0    1  2      3     4    5
    0   1    4  3  64356  5435  434
    1  11   46  3   7356   585   74
    2  51  406  3    769  5435   24
    3  12   45  5    656   135  134
    
    [[    1     4     3 64356  5435   434]
     [   11    46     3  7356   585    74]
     [   51   406     3   769  5435    24]
     [   12    45     5   656   135   134]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 2018-03-31
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 2021-10-24
      相关资源
      最近更新 更多