如何将两列二维numpy数组按第二列数值从大到小降序排序
问题原因
- 你初始化
representative_models时指定了int数据类型,但第一列是字符串类型的车型名称,插入数据后整个数组会自动转换为字符串类型,导致第二列的计数也变成字符串格式,排序时按字典序而非数值大小执行,结果不符合预期。 argsort()默认返回升序排列的索引,你需要降序结果要对索引做倒序处理。
修复方案
方案1:仅修改排序逻辑
直接在你现有代码的基础上修改排序部分即可:
# 先将第二列转为整数类型,取负后用argsort得到降序索引,也可以用[::-1]反转升序索引 sorted_idx = np.argsort(-representative_models[:, 1].astype(int)) sorted_representative_models = representative_models[sorted_idx] print(sorted_representative_models)
执行后输出就是你要求的预期结果。
方案2:优化全流程代码(推荐)
你当前用循环逐行append数组的写法效率很低,numpy原生支持批量操作,可改写为如下写法:
unique_models, count_of_models = np.unique(my_data_frame["model"], return_counts=True) # 直接合并成二维数组 all_model_data = np.column_stack((unique_models, count_of_models)) # 用掩码拆分两类车型 mask = count_of_models >= 500 representative_models = all_model_data[mask] other_models = all_model_data[~mask] # 降序排序 sorted_rep_models = representative_models[np.argsort(-representative_models[:, 1].astype(int))] print(sorted_rep_models)
内容的提问来源于stack exchange,提问作者JacobMarlo
相关产品推荐
相关产品推荐

