Python-如何基于第一列拆分数组?
我有下面的假数据。将其读入数组后,它将具有形状(8,3)。现在我想根据第一列(ID)分割数据,并返回一个数组列表,其形状为:[(3,3),(2,3),(3,3)]。我认为np.split可以通过为“index\u或\u sections”参数指定一个一维数组来完成这项工作。但是有没有更方便的方法呢Python-如何基于第一列拆分数组?,python,arrays,numpy,split,reshape,Python,Arrays,Numpy,Split,Reshape,我有下面的假数据。将其读入数组后,它将具有形状(8,3)。现在我想根据第一列(ID)分割数据,并返回一个数组列表,其形状为:[(3,3),(2,3),(3,3)]。我认为np.split可以通过为“index\u或\u sections”参数指定一个一维数组来完成这项工作。但是有没有更方便的方法呢 1 700 35 1 700 35 1 700 35 2 680 25 2 680 25 3 750 40 3 750 40 3 750 40 您可以通过组合使用np
1 700 35
1 700 35
1 700 35
2 680 25
2 680 25
3 750 40
3 750 40
3 750 40
您可以通过组合使用
np.split
、sort
、np.unique
和np.cumsum
来实现这一点
>a=[[170035],
... [1, 700, 35],
... [1, 700, 35],
... [2, 680, 25],
... [2, 680, 25],
... [3, 750, 40],
... [3, 750, 40],
... [3, 750, 40]]
>>>a=np.数组(a)
>>>#按第一列对数组进行排序。
>>>a=a[a[:,0].argsort()]
>>>np.split(a,np.cumsum(np.unique(a[:,0],return\u counts=True)[1])[:-1])
[数组([[170035],
[ 1, 700, 35],
[170035]),数组([268025],
[268025]),数组([375040],
[ 3, 750, 40],
[ 3, 750, 40]])]
您对非numpy解决方案开放吗?如果第一列中的值是连续的?np.split(a,np.flatnonzero(np.diff(a[:,0]))+1)
非常方便。这可能是重复的:numpy数组通常包含所有类型相同的数据,并且所有数据都测量相同的内容。它看起来非常有助于您,因为它是专门为处理这样的列数据而设计的。