我的Pandas DataFrame df
,如下所示:
parameter1 parameter2 value
1 1 0.1
2 0.2
2 1 0.6
2 0.3
value
是另一个groupby(['parameter1','parameter2']).mean()
上DataFrame
的结果。现在,我可以使用
value
的每个值找到parameter1
的最大值
df.max(level='parameter1')
但是,我需要为此最大值找到parameter2
的相应值。似乎df.idxmax()
不支持level=
,那么我该如何做呢?
答案 0 :(得分:3)
一个好方法是
df.unstack().idxmax(axis=1)
对数据帧进行取消堆叠会为数据框提供parameter_1
作为列索引。
答案 1 :(得分:1)
我最终找到了一个技巧:
在级别0(参数1)上的Groupby并应用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