You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas分组聚合时获取非聚合列对应值的实现方法

解决方法

要实现按species分组后获取sepal_length最小值对应的petal_width_class,核心是找到每个组里sepal_length最小的那一行,而非单独对列做聚合。这里有两种简单的实现方式:

方法一:用idxmin()定位索引后提取行

idxmin()会返回每个分组中指定列最小值所在的行索引,通过这些索引就能直接从原DataFrame中取出完整的目标行:

# 获取每个species组中sepal_length最小的行索引
min_row_indices = iris.groupby("species")["sepal_length"].idxmin()
# 根据索引提取对应的行,保留需要的列
result = iris.loc[min_row_indices, ["species", "sepal_length", "petal_width_class"]]
# 重置索引(可选,让结果更整洁)
result = result.reset_index(drop=True)

方法二:用sort_values()结合groupby().first()

先按species分组,再在每个组内按sepal_length升序排序,最后取每个组的第一行(也就是最小值对应的行):

# 先按species分组,组内按sepal_length升序排序,然后取每组第一行
result = iris.sort_values(["species", "sepal_length"]).groupby("species").first().reset_index(drop=False)
# 保留需要的列
result = result[["species", "sepal_length", "petal_width_class"]]

为什么你的原代码不符合需求?

  • 第一种代码仅对sepal_length做聚合,自然不会返回petal_width_class;
  • 第二种代码是分别对petal_width_class和sepal_length取最小值(字符串类型的petal_width_class会按字母顺序取最小,比如"a"比"b"小),和sepal_length最小值对应的行没有关联。

内容的提问来源于stack exchange,提问作者imantha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:03:50