Pandas:每个组最大值的索引

5

我的Pandas DataFrame,df,看起来像这样:

parameter1   parameter2   value

1            1            0.1
             2            0.2

2            1            0.6
             2            0.3

value是对另一个DataFrame进行groupby(['parameter1','parameter2']).mean()操作的结果。现在,我可以使用以下方法找到每个parameter1值的最大value值:

df.max(level='parameter1')

然而,我需要找到这个最大值所对应的parameter2的值。看起来df.idxmax()不支持level=,那么我该怎么做呢?

3个回答

4

最终我找到了一个技巧:

对第0层(参数1)进行分组,应用idxmax()并获取值:

v = df.groupby(level=0).idxmax().values
v
array([[(1, 2)],
       [(2, 1)]], dtype=object)

如果实现,df.idxmax(level=0)将会给出这样的结果。

因此,v 包含索引,给出该级别的最大值。所以你可以使用以下代码获得真实的值:

df.loc[v.ravel()]

                       value
parameter1 parameter2       
1          2             0.2
2          1             0.6

最终获得与最大值对应的parameter2的值:

df.loc[v.ravel()].index.values[1]
(2, 1)

HTH


4
一种不错的方式是:
df.unstack().idxmax(axis=1)

对数据框进行Unstack操作后,会得到一个以parameter_1为列索引的数据框。


0
一种选择是覆盖idxmax()函数。
def idxmax(x):
    return x.idxmax()[0]

然后使用agg()方法进行聚合:
df.groupby(['parameter1','parameter2']).agg(idxmax)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接