Python 如何将数组中的一列放入一个新数组中,同时对其应用一个奇特的索引过滤器?
基本上我有一个数组,由14列426行组成,每列代表一只狗的一个属性,每行代表一只狗,现在我想知道一只病狗的平均心脏频率,14。列是指示狗是否生病的列[0=健康1=生病],8。row是心脏频率。现在我的问题是,我不知道怎样才能得到8。列,并对其使用布尔过滤器 我对Python还很陌生。正如我上面提到的,我想我知道我必须做什么[使用一个奇特的索引过滤器],但我不知道我如何才能做到这一点。我试图在仍然在原始数组中的情况下执行此操作,但没有成功,因此我认为需要将信息放入另一个数组中,并在该数组上使用布尔过滤器 编辑:好的,下面是我现在得到的代码:Python 如何将数组中的一列放入一个新数组中,同时对其应用一个奇特的索引过滤器?,python,arrays,numpy,Python,Arrays,Numpy,基本上我有一个数组,由14列426行组成,每列代表一只狗的一个属性,每行代表一只狗,现在我想知道一只病狗的平均心脏频率,14。列是指示狗是否生病的列[0=健康1=生病],8。row是心脏频率。现在我的问题是,我不知道怎样才能得到8。列,并对其使用布尔过滤器 我对Python还很陌生。正如我上面提到的,我想我知道我必须做什么[使用一个奇特的索引过滤器],但我不知道我如何才能做到这一点。我试图在仍然在原始数组中的情况下执行此操作,但没有成功,因此我认为需要将信息放入另一个数组中,并在该数组上使用布尔
import numpy as np
def average_heart_rate_for_pathologic_group(D):
a=np.array(D[:, 13]) #gets information, wether the dogs are sick or not
b=np.array(D[:, 7]) #gets the heartfrequency
R=(a >= 0) #gets all the values that are from sick dogs
amhr = np.mean(R) #calculates the average heartfrequency
return amhr
可能您必须将数据从原始数组复制到具有选定数据的新数组中 你能分享一个样本,比如说3或4行数据吗 我会试一试的 让我在这里用4列构建
数据
(但您可以在问题中使用14列)
data=['c1a','c2a','c3a','c4a',['c1b','c2b','c3b','c4b']
您可以使用numpy.array
获取其第n列。
查看如何获得第二列:
将numpy导入为np
a=np.数组(数据)
a[:,2]
我认为布尔索引是前进的方向。
这项工作的快捷方式如下:
#您的数据:
数据=[[0,1,2,3,4,5,6,7,8…],[…]
#此索引选择第8列中等于1的行,然后选择它们的
#列编号14值。在此之后,可以对新变量进行任何分析
心脏频率=数据[数据[:,7]==1,13]
如果您想获得8。列中所有健康的狗,您可以执行以下操作:
# we use 7 for the column because the index starts by 0
# we use filter and fancy to get the rows where the conditions are true
# we use n.argwhere to get the indices where the conditions are true
A[np.argwhere([A[:,13] == 0])[:,1],7]
如果您还想计算平均值:
A[np.argwhere([A[:,13] == 0])[:,1],7].mean()
你自相矛盾。如果每一列都代表一只狗,你怎么能说“8列是心脏频率”?将fancyget一词添加到Pandas数据框中,然后在此处发布df的.head(),这样我们就可以理解你的数据形状一个问题,这个问题甚至没有发布代码片段或样本数据,而且自相矛盾,得票比答案多。你想得到8分吗。列还是8.行?不幸的是,我只有一个.npy文件的数组,我的代码看起来是这样的:a=np.Array(D[0:14426])b=np.Array(D[0:8426])a=(a>=0)R=a[b>=0]amhr=np.mean(R)return amhr您可以使用
def my_filter(在_数组中)实现您自己的过滤器之类的函数:…
很好的解决方案,但您必须使用13而不是14@CodePope谢谢总是小事