Python:通过某些ID计数事件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:通过某些ID计数事件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2222字,纯文字阅读大概需要4分钟。
内容图文
![Python:通过某些ID计数事件](/upload/InfoBanner/zyjiaocheng/666/37e6949c06a2482e99e6a41ed9c7976e.jpg)
我有以下array [] []:
import numpy as np
data = np.array([
[20, 0, 1],
[22, 0, 1],
[31, 0, 0],
[49, 1, 0],
[96, 1, 0],
[57, 2, 1],
[45, 3, 0],
[12, 3, 0],
[14, 3, 1],
[33, 4, 1],
[34, 4, 1],
[15, 4, 1]
])
让我们按以上顺序调用列:a,b,c,其中b是id.
我想通过b列中的id计算c列中1的数量
这将导致以下2列数组(第1列是唯一的(b),第2列从该ID的c中计为1):
data = np.array([
[4, 3],
[0, 2],
[2, 1],
[3, 1],
[1, 0]
])
您还可以看到它在c列中按计数的1排序
解决这个问题的想法是创建一个字典:{id1:计数1的id2:计数1的…}由b列中的id遍历数组,计算每个id的1的数量并将其作为值字典中的每个键,然后从结果中创建一个数组,并按第二列对其进行排序.
是否有任何pythonic更好的简便方法?
另一种情况是我要在每个ID的c列中添加所有整数,因此:
data = np.array([
[20, 0, 2],
[22, 0, 1],
[31, 0, 0],
[49, 1, 0],
[96, 1, 0],
[57, 2, 1],
[45, 3, 0],
[12, 3, 5],
[14, 3, 1],
[33, 4, 1],
[34, 4, 3],
[15, 4, 4]
])
我会得到
data = np.array([
[4, 8],
[3, 6],
[0, 3],
[2, 1],
[1, 0]
])
解决方法:
您可以使用np.bincount–
count = np.bincount(data[:,1],data[:,2]==1)
out = np.column_stack((np.unique(data[:,1]),count))
如果您需要按计数降序排列,则需要再添加两行代码-
sidx = count.argsort()[::-1]
out = np.column_stack((sidx,count[sidx]))
另外,如果您需要按计数降序排列并保持顺序,请使用带有’mergesort’的argsort,如下所示:
sidx = (-count).argsort(kind='mergesort')
out = np.column_stack((sidx,count[sidx]))
样品运行-
输入数组:
In [36]: data
Out[36]:
array([[20, 0, 1],
[22, 0, 1],
[31, 0, 0],
[49, 1, 0],
[96, 1, 0],
[57, 2, 1],
[45, 3, 0],
[12, 3, 0],
[14, 3, 1],
[33, 4, 1],
[34, 4, 1],
[15, 4, 1]])
第1部分 :
In [37]: count = np.bincount(data[:,1],data[:,2]==1)
...: out = np.column_stack((np.unique(data[:,1]),count))
...:
In [38]: out
Out[38]:
array([[ 0., 2.],
[ 1., 0.],
[ 2., 1.],
[ 3., 1.],
[ 4., 3.]])
第2部分 :
In [39]: sidx = count.argsort()[::-1]
...: out = np.column_stack((sidx,count[sidx]))
...:
In [40]: out
Out[40]:
array([[ 4., 3.],
[ 0., 2.],
[ 3., 1.],
[ 2., 1.],
[ 1., 0.]])
第3部分:
In [48]: sidx = (-count).argsort(kind='mergesort')
In [49]: np.column_stack((sidx,count[sidx]))
Out[49]:
array([[ 4., 3.],
[ 0., 2.],
[ 2., 1.],
[ 3., 1.],
[ 1., 0.]])
要在每个ID的c列中添加所有整数,只需对1跳过该检查-
count = np.bincount(data[:,1],data[:,2])
内容总结
以上是互联网集市为您收集整理的Python:通过某些ID计数事件全部内容,希望文章能够帮你解决Python:通过某些ID计数事件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。