根据最后两列分离数据集

Separate dataset according last two column

我正在尝试根据最后两列分隔我的数据集。 在第 3 列中,数据频率为 1、2、3、4。我想将第 3 列中每个值的数据分别为 0 和 1。例如:

第 3 列中的 1 和第 4 列中的 0 和 1 {0: [[1, 20, 1, 0],[5, 20, 1, 0]] 1: [[8, 21, 1, 1]]}

第 3 列中的 2 和第 4 列中的 0 和 1 {0: [[2, 21, 2, 0],[3, 22, 2, 0], 1: []}

第 3 列中的 3 和第 4 列中的 0 和 1 {0: [[6, 23, 3, 0]] 1: [[4, 23, 3, 1]]}

第 3 列中的 4 和第 4 列中的 0 和 1 {0: [[8, 22, 4, 0]] 1: [[7, 24, 4, 1]]}

这是我的 Jupyter 代码

def separate_by_class(dataset):

    separated = {}
    for j in range(4+1): 
        for i in range(len(dataset)):
            row = dataset[i]
            if row[-1]==j:
                if row[-1] not in separated:
                    separated[row[-1]] = []
                separated[row[-1]].append(row)
    return separated   

dataset = [[1, 20, 1, 0],
           [2, 21, 2, 0],
           [3, 22, 2, 0],
           [4, 23, 3, 1],
           [5, 20, 1, 0],
           [6, 23, 3, 0],
           [7, 24, 4, 1],
           [8, 22, 4, 0],
           [9, 21, 1, 1]
          ]
separated =separate_by_class(dataset)
separated

感谢您的帮助。

您没有提到所需的输出格式是什么,但据我了解,您希望将它们分成 dictnoaries。您可以尝试以下方法

def separate_by_class(dataset):
  separated = {}

  for ar in dataset:
    if ar[2] not in separated:
      separated[ar[2]] = {}
    if ar[3] not in separated[ar[2]]:
      separated[ar[2]][ar[3]] = []
    separated[ar[2]][ar[3]].append(ar)

  return separated

separate_by_class(dataset)

您的数据集的函数输出为

{
 1: {0: [[1, 20, 1, 0], [5, 20, 1, 0]], 1: [[9, 21, 1, 1]]},
 2: {0: [[2, 21, 2, 0], [3, 22, 2, 0]]},
 3: {0: [[6, 23, 3, 0]], 1: [[4, 23, 3, 1]]},
 4: {0: [[8, 22, 4, 0]], 1: [[7, 24, 4, 1]]}
}