我有一个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
...
所以现在我想捕获method
,它为每个dataset
提供最小值(第三列)。
我该怎么做?
答案 0 :(得分:2)
您可以将groupby
与idxmin
一起使用MultiIndex
的值,每组minimal
值,并选择元组的第二个值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