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

Pandas如何分组后基于一列最小值、另一列最大值返回对应列值?

pandas实现分组筛选赋值方案

首先导入依赖并构造测试数据:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'column1': ['A']*7,
    'column2': ['B']*7,
    'column3': [5, 2, 10, 1, 1, 1, 1],
    'column4': [4234, 432, 123, 123, 124, 125, 126],
    'column5': [123, 3243, 43, 45, 23243, 234, 23]
})

核心实现代码

# 初始化column6为空值
df['column6'] = pd.NA

# 按column1、column2分组遍历处理
for _, group in df.groupby(['column1', 'column2']):
    # 步骤1:获取当前组column3的最小值,筛选对应行
    min_c3 = group['column3'].min()
    c3_filter_rows = group[group['column3'] == min_c3]
    # 步骤2:获取筛选行中column4最大值对应的行索引
    max_c4_idx = c3_filter_rows['column4'].idxmax()
    # 步骤3:给对应行的column6赋值为该行的column5值
    df.loc[max_c4_idx, 'column6'] = c3_filter_rows.loc[max_c4_idx, 'column5']

运行后输出print(df)即可得到你期望的结果:

column1column2column3column4column5column6
AB54234123
AB24323243
AB1012343
AB112345
AB112423243
AB1125234
AB11262323

如果你只需要提取对应的目标值不需要新增column6,可以直接用如下代码获取:

def get_target(group):
    return group[group['column3'] == group['column3'].min()].nlargest(1, 'column4')['column5'].iloc[0]

# 输出每个分组对应的目标值
print(df.groupby(['column1', 'column2']).apply(get_target))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:09:02