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

如何使用groupby()比较两列数据获取分组后的最小值?

按分组获取两列中的最小值

首先需要处理数据格式:原数据中小数用逗号分隔,pandas无法直接识别为数值类型,第一步要替换逗号为点并转换类型。

场景1:获取每组中两列数值最小的完整行

如果需要保留每组里两列中最小值对应的整行数据(比如Ambulance_ID、Hospital_ID等),可以按以下步骤操作:

import pandas as pd

# 加载示例数据
df = pd.DataFrame({
    'Ambulance_ID': [37,39,6,42,37],
    'Centroid_ID': [1,2,3,4,5],
    'Hospital_ID': [6,13,6,12,14],
    'Regular_Ambu_TT': ['1,871884861','1,599971112','1,307165278','1,411554445','1,968138334'],
    'MSU_TT': ['0,459994444','0,372125','0,080163889','0,285008333','0,424172222']
})

# 预处理:替换逗号为小数点,转换为浮点型
df['Regular_Ambu_TT'] = df['Regular_Ambu_TT'].str.replace(',', '.').astype(float)
df['MSU_TT'] = df['MSU_TT'].str.replace(',', '.').astype(float)

# 新增临时列,存储每行两列的最小值
df['min_TT'] = df[['Regular_Ambu_TT', 'MSU_TT']].min(axis=1)

# 按Centroid_ID分组,找到每组min_TT最小的行索引,提取对应行
Test_TT = df.loc[df.groupby('Centroid_ID')['min_TT'].idxmin()]

# 可选:删除临时列
Test_TT = Test_TT.drop('min_TT', axis=1)
print(Test_TT)

输出会保留每组中两列数值最小的那一行所有数据,比如Centroid_ID=3的行中MSU_TT最小,就会保留该行。

场景2:分别获取每组两列各自的最小值

如果只需要每组中Regular_Ambu_TT和MSU_TT的最小值,不需要其他列数据,可以直接分组后对两列取min:

# 同样先做数据预处理(替换逗号+转类型)
df['Regular_Ambu_TT'] = df['Regular_Ambu_TT'].str.replace(',', '.').astype(float)
df['MSU_TT'] = df['MSU_TT'].str.replace(',', '.').astype(float)

# 分组后计算两列的最小值
Test_TT = df.groupby('Centroid_ID')[['Regular_Ambu_TT', 'MSU_TT']].min().reset_index()
print(Test_TT)

输出会是一个包含Centroid_ID、Regular_Ambu_TT最小值、MSU_TT最小值的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:37:08