gpt4 book ai didi

python - 根据字段名称值对numpy结构化数组中的值进行排序

转载 作者:行者123 更新时间:2023-11-28 21:10:12 26 4
gpt4 key购买 nike

我有以下结构化数组:

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 的最大 vonmises。

例如,id 2 的最大 vonmises 为 400。我确实想要相应的子案例和 maxprincipal。

这是我到目前为止所做的:

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 即可完成此操作的好方法?

最佳答案

我不知道你为什么使用这种格式,但这里有一个使用 pandas 的 hack:

import pandas as pd

df = pd.DataFrame(x)
df_ = df.groupby('id')['vonmises'].max().reset_index()

In [213]: df_.merge(df, on=['id','vonmises'])[['id','vonmises','subcase']]

Out[213]:
array([[ 2., 400., 44.],
[ 3., 400., 33.],
[ 5., 500., 55.]], dtype=float32)

关于python - 根据字段名称值对numpy结构化数组中的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36956733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com