Pandas DataFrame 行级最小值及其关联项的高效提取方法

Pandas DataFrame 行级最小值及其关联项的高效提取方法

本文详细介绍了如何在Pandas DataFrame中高效地查找每行的最小值,并同时提取与该最小值关联的特定列(例如,与数值列相邻的描述性列)的值。通过巧妙结合idxmin、字符串替换和NumPy风格的索引技巧,本教程提供了一种灵活且可扩展的解决方案,以满足数据分析中常见的复杂数据提取需求。

1. 引言与问题背景

在数据分析中,我们经常需要从dataframe的多个列中找出每行的最小值。然而,仅仅获取最小值本身通常不足以满足分析需求,我们可能还需要知道这个最小值是来自哪个“类别”或“描述项”。例如,如果dataframe包含成对的“值”列(value1, value2, value3)和对应的“项目”列(item1, item2, item3),我们的目标不仅是找到行级最小值,还要找出与该最小值对应的item值。

考虑以下DataFrame示例:

import pandas as pddf = pd.DataFrame({   'Item1': ['A', 'B', 'C', 'D'],   'Value1': [1,4,5,7],   'Item2': ['F', 'G', 'H', 'I'],   'Value2': [0,4,8,12],   'Item3': ['K', 'L', 'M', 'N'],   'Value3': [2.7,3.4,6.2,8.1],})print("原始DataFrame:")print(df)

我们的目标是生成一个包含Min_Value(每行的最小值)和Min_Item(与Min_Value对应的Item列的值)的新DataFrame,其预期结果如下:

  Item1  Value1 Item2  Value2 Item3  Value3 Min_Item  Min_Value0     A       1     F       0     K     2.7        F        0.01     B       4     G       4     L     3.4        L        3.42     C       5     H       8     M     6.2        C        5.03     D       7     I      12     N     8.1        D        7.0

2. 核心思路与步骤分解

解决此问题的关键在于如何动态地从“值”列名推断出对应的“项目”列名,并利用Pandas和NumPy的强大索引能力进行数据提取。

2.1 确定参与比较的列

首先,我们需要明确哪些列参与行级最小值的比较。在这个例子中,是所有Value开头的列。

value_cols = ['Value1', 'Value2', 'Value3']

2.2 找出每行最小值的列名

使用df[value_cols].idxmin(axis=1)可以获取每行最小值所在的列名。axis=1表示按行操作。

min_value_col_names = df[value_cols].idxmin(axis=1)print("n每行最小值所在的列名:")print(min_value_col_names)# 示例输出:# 0    Value2# 1    Value3# 2    Value1# 3    Value1# dtype: object

2.3 提取每行的最小值

有了最小值所在的列名,我们可以结合NumPy风格的索引来直接从DataFrame中提取这些值。NumPy风格的索引允许我们使用一个整数数组作为行索引,另一个整数数组作为列索引来高效地选择数据。

行索引: range(len(df)) 或 df.index 代表所有行。列索引: df.columns.get_indexer_for(min_value_col_names) 将列名Series转换为对应的整数位置数组。

row_indices = range(len(df))col_indices_for_min_values = df.columns.get_indexer_for(min_value_col_names)df['Min_Value'] = df.values[row_indices, col_indices_for_min_values]print("n添加 Min_Value 后的 DataFrame:")print(df)

此时,Min_Value列已经正确添加。

2.4 关键步骤:转换列名以获取关联项

现在,最关键的一步是根据min_value_col_names(例如Value2)推导出对应的Item列名(例如Item2)。这可以通过简单的字符串替换实现。

min_item_col_names = min_value_col_names.str.replace('Value', 'Item')print("n每行最小值对应的 Item 列名:")print(min_item_col_names)# 示例输出:# 0    Item2# 1    Item3# 2    Item1# 3    Item1# dtype: object

2.5 提取每行对应的关联项

与提取最小值类似,我们再次利用NumPy风格的索引,但这次是使用转换后的min_item_col_names来获取列的整数位置。

col_indices_for_min_items = df.columns.get_indexer_for(min_item_col_names)df['Min_Item'] = df.values[row_indices, col_indices_for_min_items]print("n最终结果 DataFrame:")print(df)

3. 完整代码示例

将上述步骤整合,可以得到一个简洁高效的解决方案:

import pandas as pd# 1. 准备数据df = pd.DataFrame({   'Item1': ['A', 'B', 'C', 'D'],   'Value1': [1,4,5,7],   'Item2': ['F', 'G', 'H', 'I'],   'Value2': [0,4,8,12],   'Item3': ['K', 'L', 'M', 'N'],   'Value3': [2.7,3.4,6.2,8.1],})print("--- 原始 DataFrame ---")print(df)# 2. 定义参与比较的数值列value_cols = ['Value1', 'Value2', 'Value3']# 3. 获取每行最小值所在的列名 (e.g., 'Value2', 'Value3')min_value_col_names = df[value_cols].idxmin(axis=1)# 4. 准备行索引 (所有行)row_indices = range(len(df))# 5. 提取每行的最小值# 将列名Series转换为DataFrame的实际列位置col_indices_for_min_values = df.columns.get_indexer_for(min_value_col_names)# 使用NumPy风格的高级索引提取值df['Min_Value'] = df.values[row_indices, col_indices_for_min_values]# 6. 转换列名以获取对应的关联项列名 (e.g., 'Value2' -> 'Item2')min_item_col_names = min_value_col_names.str.replace('Value', 'Item')# 7. 提取每行对应的关联项# 将转换后的列名Series转换为DataFrame的实际列位置col_indices_for_min_items = df.columns.get_indexer_for(min_item_col_names)# 使用NumPy风格的G高级索引提取关联项df['Min_Item'] = df.values[row_indices, col_indices_for_min_items]print("n--- 最终结果 DataFrame ---")print(df)

4. 注意事项与总结

df.values与NumPy索引: df.values返回DataFrame的底层NumPy数组。使用df.values[row_indices, col_indices]这种NumPy风格的高级索引方式,可以高效地根据行和列的整数位置批量提取数据,这比多次使用df.loc或df.iloc要快得多。df.columns.get_indexer_for(): 这个方法非常有用,它能将一个列名列表或Series转换为这些列名在DataFrame列索引中的整数位置数组,是实现NumPy高级索引的关键桥梁。列名命名规范: 本教程的解决方案依赖于ValueX和ItemX这种有规律的列名。如果你的列名没有这种规律(例如Price_A, Description_A),则需要调整字符串替换逻辑,或者维护一个从Value列名到Item列名的映射字典。性能: 这种方法利用了Pandas和NumPy的向量化操作,对于大型DataFrame来说,其性能远优于使用apply配合lambda函数或循环迭代行的方式。

通过本教程介绍的方法,您可以灵活地在Pandas DataFrame中查找行级最小值,并同时提取其对应的关联数据,从而更深入地理解和分析您的数据集。

以上就是Pandas DataFrame 行级最小值及其关联项的高效提取方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1376448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Little Professor 错误排查:解决 “EEE” 显示和答案显示问题
上一篇 2025年12月14日 15:55:21
为什么 pydoc 将 “any” 识别为包?
下一篇 2025年12月14日 15:55:36

相关推荐

  • 晋江app如何导入本地字体文件_晋江阅读器自定义字体导入指南

    首先确认晋江App支持自定义字体,更新至最新版并检查设置中是否有字体管理功能;接着准备TTF或OTF格式的本地字体文件,通过“文件”应用保存至设备;然后使用共享菜单中的“拷贝到晋江”选项导入字体;成功导入后,在阅读界面进入字体设置选择新字体并应用;若直接导入失败,可借助AnyFont等第三方工具完成…

    2026年9月1日
    000
  • 点淘个人资料怎么修改_点淘个人资料怎么修改确保信息准确无误

    打开点淘App进入“我的”页面,点击头像或编辑按钮可修改昵称、简介和头像。2. 在对应选项中输入新信息并保存,即可完成个人资料更新。 如果您在使用点淘时需要更新或修正个人信息,以确保账户资料的准确性,可以通过应用内的个人中心进行修改。以下是具体的操作步骤。 本文运行环境:iPhone 15 Pro,…

    2026年9月1日
    100
  • 百度地图怎么查询停车场收费标准_百度地图停车场收费查询方式

    可通过百度地图查询停车场收费标准:搜索目的地后,在详情页或导航途经点中查看“附近停车场”,部分会直接显示收费信息,还可通过用户上传的图片和评价了解公示牌内容以获取准确费用。 如果您想在出行前了解目的地停车场的收费标准,以避免到达后因费用不明而产生困扰,可以通过百度地图获取部分停车场的收费信息。以下是…

    2026年9月1日
    000
  • 悟空搜索能在手机上用吗_悟空搜索移动端使用教程

    首先下载安装悟空浏览器APP,进入应用后开启AI搜索功能并登录账号,通过语音或文字输入进行智能查询,同时可设置流量优化以提升使用体验。 如果您想在移动设备上使用悟空搜索获取信息,但不确定其操作方式或功能设置,可能会遇到访问不便或功能无法正常使用的情况。以下是针对手机端使用悟空搜索的具体指导步骤: 一…

    2026年9月1日
    100
  • 小红书千帆APP有哪些数据指标_小红书千帆APP核心数据指标说明

    小红书千帆APP核心数据指标包括流量、互动、转化和用户资产四类。1、流量指标涵盖商品曝光人数、曝光次数、浏览人数及浏览次数,反映内容展示与触达效果。2、互动指标包括笔记互动量、互动人数和分享次数,衡量用户参与度与内容传播力。3、转化指标含成交订单数、成交金额(GMV)、下单转化率和支付转化率,直接评…

    2026年9月1日
    100
  • 米读极速版广告太多怎么办_米读极速版减少广告弹窗技巧

    关闭个性化广告推荐可降低广告频率,进入“我的-设置-隐私设置”关闭该功能;通过阅读界面的“看视频免广告”按钮观看短视频,可获15分钟免广告期;开通会员服务能永久去除广告,提升阅读体验;定期清理应用缓存与数据,有助于减少异常广告弹窗。 如果您在使用米读极速版阅读小说时,频繁遭遇广告弹窗干扰阅读体验,可…

    2026年9月1日
    000
  • 快手极速版和快手有什么区别_快手极速版与快手对比

    快手和快手极速版不是同一平台,前者功能全适合创作与直播带货,后者更轻便专注刷视频赚金币,广告多但支持拉新变现。 如果您在选择使用快手还是快手极速版时感到困惑,可能是因为两者在功能、收益模式和用户体验上存在显著差异。了解这些区别有助于您根据自身需求做出合适的选择。 本文运行环境:华为Mate 60 P…

    2026年8月31日
    200
  • 同城旅行app如何筛选特色民宿_同城旅行app筛选特色民宿实用技巧

    答案:通过地图模式、智能排序、图片核查和服务筛选可精准定位特色民宿。先用地图锁定景区或街区核心房源,再按收藏数和新上线筛选高人气新房,接着对比住客实拍与房东图片确保真实样貌,最后通过关键词和服务配置确认风格与需求匹配。 如果您在同城旅行App上寻找具有独特风格和体验的民宿,但面对海量信息无从下手,可…

    2026年8月31日
    000
  • 通过 Eloquent 模型关联实现订单菜品分组

    本文旨在介绍如何使用 Laravel Eloquent 模型关联,根据餐厅 ID 获取订单信息,并将订单中的菜品按照订单 ID 进行分组,最终返回包含订单详细信息和菜品列表的 JSON 数据。通过 `with()` 和 `whereHas()` 方法,可以避免使用循环,提高查询效率,使代码更加简洁易…

    2026年8月31日
    300
  • 如何强制解除捡到的iPhone ID锁

    一、认识ID锁的核心作用 在面对捡到的iPhone时,首先要理解ID锁(即“激活锁”)是苹果为保障用户数据安全和设备防丢失所设计的重要机制。该功能会将设备与原机主的Apple ID绑定,防止未经授权的人员使用或激活设备。正因如此,任何试图绕过这一保护机制的行为都可能触碰法律红线,我们应以合法方式妥善…

    2026年8月31日
    000
  • 如何在Java中配置CLASSPATH环境变量

    CLASSPATH是Java中用于指定类和资源文件路径的环境变量或参数,JVM和编译器依赖它查找.class文件及jar包。其路径列表在Windows用分号、Linux/macOS用冒号分隔,可包含目录、jar或zip文件。未正确设置会导致“找不到类”或NoClassDefFoundError错误。…

    2026年8月31日
    100
  • 百度小说账户密码忘记怎么办_百度小说密码找回重置流程

    首先通过绑定手机号或邮箱重置密码,若无法使用原凭证则提交人工申诉,按步骤验证身份后找回百度小说账户。 如果您尝试登录百度小说账户,但因密码遗忘导致无法访问个人书架或续读记录,可能是由于未正确输入登录凭证。以下是解决此问题的步骤: 本文运行环境:小米14,Android 14 一、通过绑定手机号重置密…

    2026年8月31日
    100
  • 晋江app怎么设置翻页方式_晋江app阅读翻页模式调整方法

    1、可在晋江App中通过阅读界面、书架页面或个人中心设置翻页方式;2、阅读界面点击屏幕调出菜单进入设置,选择滑动、仿真等模式;3、书架长按书籍可设全局默认翻页效果;4、个人中心的阅读偏好支持批量修改,统一应用新翻页方式。 如果您在使用晋江App阅读小说时觉得当前的翻页方式不够顺手,可以通过设置调整翻…

    2026年8月31日
    200
  • PHP中高效处理多URL请求:避免循环嵌套陷阱

    本文旨在解决PHP中处理多个URL请求时常见的循环逻辑错误,特别是当URL数据来源于数据库查询时。通过分析错误的嵌套循环模式,提供一种简洁高效的解决方案,即在单个循环中直接处理每条数据库记录并发送HTTP请求。此外,文章还将探讨 file_get_contents 的使用细节、潜在的性能问题以及替代…

    2026年8月31日
    100
  • 作业帮怎么联系客服寻求帮助_作业帮客服联系方式大全

    遇到问题可联系作业帮客服,优先拨打400-618-8000或通过APP内「帮助与反馈」提交工单,支持账号、支付等问题咨询,人工服务时间为工作日9:00-18:00。 如果在使用作业帮过程中遇到问题,可以直接通过官方渠道联系客服获取帮助。最有效的方式是拨打作业帮的全国统一客服热线 400-618-80…

    2026年8月31日
    000
  • 苹果手机app下载不了软件如何解决

    网络连接异常 下载应用的前提是网络畅通。请先确认设备是否已成功连接Wi-Fi或蜂窝数据。如果当前网络信号较弱或连接不稳定,建议切换至更稳定的网络环境,例如从信号差的Wi-Fi转为使用4G/5G移动数据,或反过来尝试。还可以尝试关闭无线网络再重新开启,稍等片刻后再次进行下载操作。 存储容量不够 当iP…

    2026年8月31日
    200
  • 晋江app怎么看自己消费了多少晋江币_晋江app个人消费记录查询教程

    1、打开晋江APP点击头像进入个人中心,选择【账务】查看消费记录;2、在消费页面筛选时间段可查特定周期支出;3、支持导出记录用于外部统计分析。 如果您在使用晋江文学城APP时,想要了解自己累计消费了多少晋江币,可以通过应用内的账务系统进行查询。该系统记录了用户的全部财务活动,包括充值和消费明细。 本…

    2026年8月31日
    000
  • 猫眼查看上映影片都有哪些_猫眼正在热映影片列表查询

    首先刷新猫眼App首页,下拉页面触发加载;接着进入手机设置清除猫眼缓存并重启应用;然后检查网络连接,确保Wi-Fi或蜂窝数据正常,必要时切换网络;最后前往App Store更新猫眼至最新版本以解决兼容性问题。 如果您想在猫眼平台上查询当前正在热映的影片,但发现列表信息不全或加载异常,可能是由于网络缓…

    2026年8月31日
    000
  • 淘宝购物车商品消失怎么办 淘宝购物车同步与修复方法

    商品不见主因是已购买、下架或误删,可依次检查订单、足迹及收藏夹;若为同步问题,尝试重启APP或清理缓存,并通过客服寻求帮助。 淘宝购物车里的商品突然不见了,确实挺让人着急的。别担心,这通常不是技术故障,而是有迹可循的。先别急着重新搜索,按下面的方法一步步来排查和恢复,大部分情况都能解决。 检查商品状…

    2026年8月31日
    000
  • google浏览器怎么卸载干净_google浏览器彻底卸载方法

    通过系统设置卸载Chrome;2. 使用控制面板卸载并删除浏览数据;3. 手动删除AppData和ProgramData中的残留文件;4. 清理注册表中Google相关项;5. 删除Google更新任务并禁用更新服务,确保彻底移除。 如果您发现Google Chrome浏览器占用系统资源或与其他应用…

    2026年8月31日
    300

发表回复

登录后才能评论
关注微信