基于NUMPY数组按多列分组统计行数
仅用Numpy实现按多列分组统计行数
实现步骤与代码
将输入列表转为Numpy数组后,通过np.unique识别唯一分组键,结合np.bincount统计每组行数,最终拼接得到目标结果:
import numpy as np # 输入数组 arr = np.array([['a', '1' ,'2.3'], ['a', '1' ,'1.1'], ['b', '2', '3.4'], ['a', '2', '10.1']]) # 提取前两列作为分组依据 group_keys = arr[:, :2] # 获取唯一分组键,以及原数组元素对应的唯一键索引 unique_keys, inverse_indices = np.unique(group_keys, axis=0, return_inverse=True) # 统计每个唯一分组的行数 counts = np.bincount(inverse_indices).reshape(-1, 1) # 拼接分组键与统计次数 arr_counts = np.hstack([unique_keys, counts]) # 转为列表格式(与示例输出结构一致) arr_counts_list = arr_counts.tolist() print(arr_counts_list)
代码说明
arr[:, :2]:截取原数组前两列,作为分组的核心键值。np.unique(..., axis=0, return_inverse=True):按行维度识别唯一的分组组合,return_inverse=True返回的索引数组用于后续次数统计。np.bincount(inverse_indices):根据索引数组统计每个唯一分组的出现次数,reshape(-1,1)将一维次数数组转为二维,确保能与分组键数组横向拼接。np.hstack(...):将唯一分组键和对应次数拼接为目标格式的数组。
运行后输出结果与预期一致:
[['a', '1', 2], ['a', '2', 1], ['b', '2', 1]]
内容的提问来源于stack exchange,提问作者user11809571
相关产品推荐
相关产品推荐

