如何使用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
相关产品推荐
相关产品推荐

