对数据表执行groupby后如何获取每个分组下值最大的对应行?
解法
你计算得到的是带有interval、stop_name双重索引的Series,按以下步骤操作即可得到目标结果:
- 先把分组求均值的结果存为变量,再转成DataFrame格式便于后续处理
# 先保存平均延迟计算结果 avg_delay = delays_with_stop_names.groupby(['interval','stop_name'])['delay'].mean()
- 任选以下任意一种方法提取每个interval的最高平均延迟记录:
方法1:groupby + idxmax(逻辑直观)
按interval分组后,直接取每组平均延迟最大值对应的行:
result = avg_delay.reset_index(name='avg_delay') \ .groupby('interval') \ .apply(lambda x: x.loc[x['avg_delay'].idxmax()]) \ .reset_index(drop=True)
方法2:排序 + 去重(执行效率更高)
先按interval升序、平均延迟降序排序,再按interval去重保留第一条记录即可:
result = avg_delay.reset_index(name='avg_delay') \ .sort_values(['interval', 'avg_delay'], ascending=[True, False]) \ .drop_duplicates('interval', keep='first') \ .reset_index(drop=True)
- 调整格式并输出你需要的样式:
# 把平均延迟转为整数 result['avg_delay'] = result['avg_delay'].astype(int) # 按要求格式打印 for _, row in result.iterrows(): print(row['interval'], row['stop_name'], row['avg_delay'])
内容的提问来源于stack exchange,提问作者Filip
相关产品推荐
相关产品推荐

