我有以下结构化数组:
import numpy as np
x = np.rec.array([(22,2,200.,2000.), (44,2,400.,4000.), (55,5,500.,5000.), (33,3,400.,3000.)],
dtype={'names':['subcase','id', 'vonmises','maxprincipal'], 'formats':['i4','i4','f4','f4']})
我正在尝试获取每个id的最大von Mises值。
例如,id为2的最大von Mises值为400。我也想要相应的子案例和最大主应力。
到目前为止,我已经完成了以下工作:
print repr(x[['subcase','id','vonmises']][(x['id']==2) & (x['vonmises']==max(x['vonmises'][x['id']==2]))])
这是输出结果:
array([(44, 2, 400.0)],
dtype=(numpy.record, [('subcase', '<i4'), ('id', '<i4'), ('vonmises', '<f4')]))
我现在遇到的问题是我希望这适用于数组中的所有 id,而不仅仅是 id=2。
即希望获得以下输出:
array([(44, 2, 400.0),(55, 5, 500.0),(33, 3, 400.0)],
dtype=(numpy.record, [('subcase', '<i4'), ('id', '<i4'), ('vonmises', '<f4')]))
有没有一种好的方法可以在不指定每个单独的ID的情况下完成此操作?
DataFrame
表示法来进行每个组的最大值和最大值筛选,例如df
和df_
,而不是使用这些 rec array。 - Colonel Beauvelnp.sort
允许您根据字段指定排序顺序,例如['id','vonmises']
。但是,然后您必须使用类似于intertools.groupby
的东西来提取每个组的第一个或最后一个。这是可能的,但比在pandas
中更混乱。 - hpaulj