Python 如何将数组中的一列放入一个新数组中,同时对其应用一个奇特的索引过滤器?

Python 如何将数组中的一列放入一个新数组中,同时对其应用一个奇特的索引过滤器?,python,arrays,numpy,Python,Arrays,Numpy,基本上我有一个数组,由14列426行组成,每列代表一只狗的一个属性,每行代表一只狗,现在我想知道一只病狗的平均心脏频率,14。列是指示狗是否生病的列[0=健康1=生病],8。row是心脏频率。现在我的问题是,我不知道怎样才能得到8。列,并对其使用布尔过滤器 我对Python还很陌生。正如我上面提到的,我想我知道我必须做什么[使用一个奇特的索引过滤器],但我不知道我如何才能做到这一点。我试图在仍然在原始数组中的情况下执行此操作,但没有成功,因此我认为需要将信息放入另一个数组中,并在该数组上使用布尔

基本上我有一个数组,由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谢谢总是小事