查找双索引分组依据数据帧中具有最小值的内部索引



我有一个Pandas DataFrame,经过一些分组操作,例如:

df.groupby(["dataset", "method"])["mae"].mean()

它看起来像:

dataset             method
acute.a             AC        0.003516
EDX       0.028901
EDy       0.029160
HDX       0.040332
HDy       0.027015
acute.b             AC        0.003575
EDX       0.043130
EDy       0.029151
HDX       0.016335
HDy       0.003692
balance.1           AC        0.012195
EDX       0.019322
EDy       0.010015
HDX       0.018285
HDy       0.009011
balance.2           AC        0.179619
EDX       0.259377
EDy       0.497555
HDX       0.444765
HDy       0.435202
balance.3           AC        0.028937
EDX       0.034840
EDy       0.014509
HDX       0.037650
HDy       0.014660
breast-cancer       AC        0.005540
EDX       0.007067
EDy       0.006252
HDX       0.012012
HDy       0.005629
...  

所以现在我想捕获为每个dataset提供最小值(第三列(的method

我该怎么做?

您可以将groupbyidxmin一起使用,通过minimal每个组的值来MultiIndex的值,对于元组的第二个选择值,添加str[1]

s = df.groupby(["dataset", "method"])["mae"].mean()
s1 = s.groupby(level=0).idxmin().str[1]
print (s1)
dataset
acute.a           AC
acute.b           AC
balance.1        HDy
balance.2         AC
balance.3        EDy
breast-cancer     AC
Name: mae, dtype: object

如果需要,还可以按loc选择值:

s2 = s.loc[s.groupby(level=0).idxmin()]
print (s2)
dataset        method
acute.a        AC        0.003516
acute.b        AC        0.003575
balance.1      HDy       0.009011
balance.2      AC        0.179619
balance.3      EDy       0.014509
breast-cancer  AC        0.005540
Name: mae, dtype: float64

最新更新