如何在Pandas中按Hr分组后获取对应最高Freq的Loc值?
按Hr分组获取对应最高Freq的Loc值解决方案
你现有一个以Hr为索引的Pandas DataFrame,包含Loc和Freq列,共约5000行。需要按Hr分组,提取每组中Freq(频率)最高的对应Loc值,同时保留Hr、Loc、Freq三列数据。
之前执行的location.groupby(['Hr'])['Freq'].max()仅能得到每组的最高Freq值,无法关联对应的Loc,可以用以下几种方法实现需求:
方法一:利用idxmax定位最大值行
idxmax会返回每组中Freq最大值对应的原DataFrame索引,通过loc即可提取完整行数据:
# 获取每组Freq最大值对应的行索引 max_freq_indices = location.groupby('Hr')['Freq'].idxmax() # 提取对应行,保留所有列 result = location.loc[max_freq_indices].reset_index(drop=False)
执行后result即为包含Hr、Loc、Freq的目标结果,每组仅保留Freq最大的一行。
方法二:排序后取每组首行
先按Hr升序、Freq降序排序,再取每组第一行:
# 按Hr分组内的Freq降序排列,取每组第一行 result = location.sort_values(by=['Hr', 'Freq'], ascending=[True, False])\ .groupby('Hr').head(1)\ .reset_index(drop=False)
这种方法逻辑直观,同样能得到每组Freq最高的行数据。
方法三:保留所有最大值行(多值情况)
如果存在同一Hr组内多个Loc的Freq同为最大值的情况,可使用transform筛选所有符合条件的行:
# 计算每组的最大Freq值 max_freq_per_group = location.groupby('Hr')['Freq'].transform('max') # 筛选出所有Freq等于组内最大值的行 result = location[location['Freq'] == max_freq_per_group].reset_index(drop=False)
此方法会保留每组中所有Freq为最大值的行,适合需要完整展示所有极值数据的场景。
内容的提问来源于stack exchange,提问作者azaya
相关产品推荐
相关产品推荐

