我认为我不需要分享整个数据帧,但基本上,这是有问题的代码行(当然已经导入了大熊猫)
divstack = df[df['Competitor']=='Emma Slabach'].groupby(['Division','Stack'])['Time'].min()
输出结果为:
>>> divstack
Division Stack
6U F 3/3/03 2.66
3/6/03 4.81
Cycle 13.89
7-8 F 3/3/03 2.41
3/6/03 2.68
Cycle 7.71
9-10 F 3/3/03 2.13
3/6/03 2.75
Cycle 6.94
Name: Time, dtype: float64
由于这行代码,我已经抓住了Emma的最快时间2.13
:
emma = df[df['Competitor']=='Emma Slabach'].groupby(['Competitor'])['Time'].min()
,输出为:
>>> emma
Competitor
Emma Slabach 2.13
Name: Time, dtype: float64
但是,我如何才能修改前面的第一行代码,专门获取最快时间发生时的Division
和Stack
(以及Time
)? (9-10F和Stack 3/3/03)。
我不认为函数是必要的,但有没有办法可以在我得到的第一个groupby输出(divstack
)之上执行另一个groupby,以进一步"最小化&#34 34;并获得她最快的时间?
或者我可以在emma
中的某处输入divstack
以获得该时间发生的分区/堆栈吗?
我需要将分区,堆栈和时间存储到divstack
答案 0 :(得分:2)
鉴于divstack
,您可以使用.loc
和min()
检索完整的MultiIndex条目:
divstack.loc[divstack.eq(divstack.min())]
Division Stack
9-10 F 3/3/03 2.13
Name: Time, dtype: float64
答案 1 :(得分:1)
我认为你正在寻找idxmin功能 https://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.core.groupby.DataFrameGroupBy.idxmin.html
result = df.loc[df.groupby('Competitor').Time.idxmin()]
应该为每个竞争对手提供您想要的东西。如果需要,只需过滤Emma:result.loc[result.Competitor == 'Emma Slabach']
In [6]: df = pd.DataFrame([['Emma Slabach', '6U F', '3/3/03', 2.66], ['Emma Slabach', '7-8 F', '3/3/03', 2.41], ['Roger', '6U F', '3/3/03', 3.80]], columns=['Competitor', 'Div
...: ision', 'Stack', 'Time'])
In [7]: df
Out[7]:
Competitor Division Stack Time
0 Emma Slabach 6U F 3/3/03 2.66
1 Emma Slabach 7-8 F 3/3/03 2.41
2 Roger 6U F 3/3/03 3.80
In [8]: df.loc[df.groupby('Competitor').Time.idxmin()]
Out[8]:
Competitor Division Stack Time
1 Emma Slabach 7-8 F 3/3/03 2.41
2 Roger 6U F 3/3/03 3.80