如何按数据集第三列取值、第四列0/1值完成数据分组拆分
数据集双层分组解决方案
你原有代码仅实现了按第四列的单层分组,没有加入第三列的第一层分组逻辑,也没有预初始化无匹配数据的空列表,因此无法满足需求。修正后的实现代码如下:
def separate_by_class(dataset): # 预初始化第三列1~4的分组,每个分组下提前创建第四列0、1对应的空列表 separated = { 1: {0: [], 1: []}, 2: {0: [], 1: []}, 3: {0: [], 1: []}, 4: {0: [], 1: []} } for row in dataset: # 取第三列(下标为2)作为第一层分组键 level1_key = row[2] # 取第四列(下标为3)作为第二层分组键 level2_key = row[3] separated[level1_key][level2_key].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
运行后返回的结构与你要求的分组规则完全匹配,输出如下:
{ 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]], 1: []}, 3: {0: [[6, 23, 3, 0]], 1: [[4, 23, 3, 1]]}, 4: {0: [[8, 22, 4, 0]], 1: [[7, 24, 4, 1]]} }
如果需要按你示例的格式逐行打印结果,可以追加以下代码:
for col3_val in separated: print(f"针对第三列取值为{col3_val}、第四列取值为0和1的分组结果:") print(separated[col3_val])
内容的提问来源于stack exchange,提问作者user3176335
相关产品推荐
相关产品推荐

