使用pandas聚合函数取最大值时如何显示对应分组列?
原代码的问题
你编写的代码执行到最后一步.max()时,只会对聚合得到的数值列取最大标量值,作为分组索引的customer_state信息不会随max结果返回,所以最终输出只剩孤立的均值数字,丢失了对应的州名信息。
可直接落地的实现方法
方法1:用idxmax()关联索引(推荐,性能最优)
pandas的Series对象自带idxmax()方法,可以直接返回最大值对应的索引标签,不需要对全量数据做全排序,计算效率最高,适配你原来的代码逻辑改动最小:
# 沿用你原有的分组聚合逻辑 agg_result = data.groupby('customer_state').agg({'payment_value':'mean'}) # 获取最高均值对应的customer_state取值 top_state = agg_result['payment_value'].idxmax() # 获取对应的最高均值数值 top_payment_mean = agg_result['payment_value'].max() # 输出为你期望的格式,保留6位小数和示例对齐 print(f"{top_state} {top_payment_mean:.6f}")
方法2:排序后取首位记录
如果需要保留全量州的均值排序结果做后续分析,可以先对聚合结果按均值降序排列,直接提取第一行的索引和值:
state_payment_mean = data.groupby('customer_state')['payment_value'].mean() # 按均值从高到低排序 sorted_mean = state_payment_mean.sort_values(ascending=False) # 提取排序后第一行的州名和对应均值 top_state = sorted_mean.index[0] top_payment_mean = sorted_mean.iloc[0] print(f"{top_state} {top_payment_mean:.6f}")
注意:如果分组聚合后直接对结果调用不带任何参数的.max(),最终只会返回纯数值结果,永远无法携带对应的索引行信息,这是你当前结果不符合预期的核心原因。
内容的提问来源于stack exchange,提问作者kilmonger
相关产品推荐
相关产品推荐

