熊猫:每组

时间:2015-08-19 14:02:28

标签: python pandas dataframe

我的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=,那么我该如何做呢?

2 个答案:

答案 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