python - 如何获取具有唯一列值的行数(按其他列值分组)?
问题描述
考虑以下数组:
x = np.array([[1, 1],[1, 1], [1, 2], [1, 2], [1, 2],
[2, 3], [2, 3], [2, 3], [2, 4], [2, 4]])
x
Out[12]:
array([[1, 1],
[1, 1],
[1, 2],
[1, 2],
[1, 2],
[2, 3],
[2, 3],
[2, 3],
[2, 4],
[2, 4],
[2, 5],
[2, 5],
[2, 5]])
如何获得每个第 1 列值的唯一第 2 列值的数量?
例如:如果可以使用函数 V 完成,则 V(x) = [2, 3]。
我已经使用 for 循环实现了这一点。但是,它似乎比必要的更复杂并且花费了太多时间(当应用于比这个示例大得多的实际数据集时)。
我对性能感兴趣并且愿意为了速度而牺牲代码的清晰度(尽管它们通常是直接相关的!)。
解决方案
使用numpy.unique
两次:
import numpy as np
x = np.array([[1, 1],[1, 1], [1, 2], [1, 2], [1, 2],
[2, 3], [2, 3], [2, 3], [2, 4], [2, 4]])
# drop duplicates
xx = np.unique(x, axis=0)
# count the first column
values, counts = np.unique(xx[:,0], return_counts=True)
print(values)
print(counts)
# [1, 2]
# [2, 2]
推荐阅读
- git - 如果一个分支从未合并到 master 中,删除该分支是否也会从 repo 中删除其提交?
- vba - 如何复制包含附件的记录?
- java-websocket - 使用嵌入式 Tomcat 8,如果 tomcat-embed-websocket.jar 不在类路径中,如何初始化 Websocket 容器?
- r - 在 Rcpp 中生成多元高斯分布
- python - 对数据框列使用while循环时出现AttributeError
- python - 如何获得每个主题 LDA 的唯一词?
- javascript - 悬停时左侧边距在轮播上不起作用
- firebase - 从 ember 连接 firebase 得到 firebase.app 不是函数 getApp
- solace - Solace - 如何创建 ISubscription 实例以供 Session.CreateFlow 方法使用
- ruby-on-rails - Rails 6 和 Framework7 使用 Webpacker