Python 如何在一定条件下制作numpy数组?

Python 如何在一定条件下制作numpy数组?,python,pandas,numpy,Python,Pandas,Numpy,我有一个numpy结构的数组,看起来像这样: idx lvl start end 60 71 10.0 0.0 60 72 0.0 25.0 60 73 0.0 35.0 61 73 5.0 0.0 65 71 5.0 0.0 67 72 5.0 0.0 67 74 0.0 10.0 ... idx start_lvl end_lvl 60 71 73

我有一个numpy结构的数组,看起来像这样:

  idx lvl start   end
   60  71  10.0   0.0
   60  72   0.0  25.0
   60  73   0.0  35.0
   61  73   5.0   0.0
   65  71   5.0   0.0
   67  72   5.0   0.0
   67  74   0.0  10.0
   ...
idx start_lvl end_lvl
 60        71      73
 67        72      74
在某些条件下,我想用它制作一个新数组

1) 使用至少有一个起始值和一个结束值的行 (本例中使用idx 60和67行)

2) 如果有多个开始值和结束值,则仅使用该级别的最大结束值级别和最小开始值级别(idx 60将有71和73)

结果如下所示:

  idx lvl start   end
   60  71  10.0   0.0
   60  72   0.0  25.0
   60  73   0.0  35.0
   61  73   5.0   0.0
   65  71   5.0   0.0
   67  72   5.0   0.0
   67  74   0.0  10.0
   ...
idx start_lvl end_lvl
 60        71      73
 67        72      74
我不介意使用pandas,但我希望避免使用附加数组或循环。有什么简单的方法可以做到这一点吗?

首先只按
idx
列中有重复项的行进行筛选,然后按
lvl
列创建索引,因此可以使用-按最大列数获取索引值:

 #create DataFrame from structured array, thanks @SpghttCd 
df = pd.DataFrame(struct_arr)

df = df[df['idx'].duplicated(keep=False)].set_index('lvl').groupby('idx').idxmax()
print (df)
     start  end
idx            
60      71   73
67      72   74
根据说明,需要
idxmin
用于
start
-它返回第一个最小值:

df2 = (df[df['idx'].duplicated(keep=False)]
           .set_index('lvl')
           .groupby('idx')
           .agg({'start':'idxmin', 'end':'idxmax'}))
print (df2)
     start  end
idx            
60      72   73
67      74   74

预期输出是否正确?我认为
如果有多个起始值和终止值,则只使用该级别的最大终止值级别和*最小起始值*级别
@jezrael哦,对不起!我很困惑,我的意思是最大级别值和最小级别值本身,但是,我参考了您的答案,找到了解决方案。谢谢你的帮助!所以IIUC,被接受的答案并不代表正确的解决方案,但只帮助你找到某种方法来获得你所需要的。。。?在这里找不到正确的解决方案?