获取行最小值及其对应列名的Python教程

DDD
发布: 2025-10-09 10:33:22
原创
216人浏览过

获取行最小值及其对应列名的python教程

本文档旨在介绍如何使用Python的pandas库,在一个DataFrame中查找每一行的最小值,并同时获取与该最小值关联的列名。通过示例代码,我们将演示如何高效地实现这一目标,并提供必要的解释和注意事项,帮助读者理解和应用该方法。

使用pandas获取行最小值及其对应列名

在数据分析中,经常需要找出DataFrame每一行的最小值,并进一步获取该最小值对应的列名。以下提供一种简洁高效的实现方法,使用pandas库可以轻松完成此任务。

示例代码

假设我们有以下DataFrame:

立即学习Python免费学习笔记(深入)”;

import pandas as pd

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(df)
登录后复制

输出:

  Item1  Value1 Item2  Value2 Item3  Value3
0     A       1     F       0     K     2.7
1     B       4     G       4     L     3.4
2     C       5     H       8     M     6.2
3     D       7     I      12     N     8.1
登录后复制

我们的目标是找到每一行Value1, Value2, Value3中的最小值,并获取对应的Item列的值。

实现步骤

  1. 确定数值列: 首先,定义包含数值的列名列表。

    c = ['Value1', 'Value2', 'Value3']
    登录后复制
  2. 查找最小值的列索引: 使用idxmin(1)方法找到每一行最小值对应的列名。1表示按行查找。

    x, y = range(len(df)), df[c].idxmin(1)
    print(y)
    登录后复制

    输出:

    0    Value2
    1    Value3
    2    Value1
    3    Value1
    dtype: object
    登录后复制
  3. 获取最小值: 使用df.values和df.columns.get_indexer_for(y)方法获取最小值。

    NameGPT名称生成器
    NameGPT名称生成器

    免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

    NameGPT名称生成器 0
    查看详情 NameGPT名称生成器
    df['Min_Value'] = df.values[x, df.columns.get_indexer_for(y)]
    print(df)
    登录后复制

    输出:

      Item1  Value1 Item2  Value2 Item3  Value3  Min_Value
    0     A       1     F       0     K     2.7        0.0
    1     B       4     G       4     L     3.4        3.4
    2     C       5     H       8     M     6.2        5.0
    3     D       7     I      12     N     8.1        7.0
    登录后复制
  4. 获取对应的Item: 将Value替换为Item,然后使用类似的方法获取对应的Item。

    yi = y.str.replace('Value', 'Item')
    df['Min_Item'] = df.values[x, df.columns.get_indexer_for(yi)]
    print(df)
    登录后复制

    输出:

      Item1  Value1 Item2  Value2 Item3  Value3  Min_Value Min_Item
    0     A       1     F       0     K     2.7        0.0        F
    1     B       4     G       4     L     3.4        3.4        L
    2     C       5     H       8     M     6.2        5.0    Item1
    3     D       7     I      12     N     8.1        7.0    Item1
    登录后复制

    注意到,当最小值是Value1时,对应的Min_Item是Item1,但我们期望得到的是A,B等。需要对代码进行修正。

  5. 修正Item列的获取: 找到最小值对应列的索引后,需要根据这个索引,结合原始DataFrame的结构,来确定对应的Item列。这里可以写一个函数来实现,以避免硬编码列名。

    def get_corresponding_item(row):
        min_value_col = row['min_value_col'] # 最小值对应的列名
        item_col = min_value_col.replace('Value', 'Item') # 将Value替换为Item
        # 获取Item列对应的索引
        item_index = df.columns.get_loc(item_col)
    
        # 返回对应的Item值
        return row[item_index]
    
    # 获取每一行最小值对应的列名
    df['min_value_col'] = df[c].idxmin(axis=1)
    
    # 应用函数获取对应的Item值
    df['Min_Item'] = df.apply(get_corresponding_item, axis=1)
    df = df.drop(columns=['min_value_col'])
    
    print(df)
    登录后复制

    输出:

      Item1  Value1 Item2  Value2 Item3  Value3  Min_Value Min_Item
    0     A       1     F       0     K     2.7        0.0        F
    1     B       4     G       4     L     3.4        3.4        L
    2     C       5     H       8     M     6.2        5.0        C
    3     D       7     I      12     N     8.1        7.0        D
    登录后复制

完整代码

import pandas as pd

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],
   })

c = ['Value1', 'Value2', 'Value3']
x, y = range(len(df)), df[c].idxmin(1)

df['Min_Value'] = df.values[x, df.columns.get_indexer_for(y)]

def get_corresponding_item(row):
    min_value_col = row['min_value_col'] # 最小值对应的列名
    item_col = min_value_col.replace('Value', 'Item') # 将Value替换为Item
    # 获取Item列对应的索引
    item_index = df.columns.get_loc(item_col)

    # 返回对应的Item值
    return row[item_index]

# 获取每一行最小值对应的列名
df['min_value_col'] = df[c].idxmin(axis=1)

# 应用函数获取对应的Item值
df['Min_Item'] = df.apply(get_corresponding_item, axis=1)
df = df.drop(columns=['min_value_col'])

print(df)
登录后复制

注意事项

  • 确保数值列的数据类型一致,以便正确比较。
  • 如果存在多个最小值,idxmin() 返回第一个出现的最小值的列名。
  • get_indexer_for() 方法可以高效地获取列名对应的索引。
  • 根据实际DataFrame的结构调整代码,特别是Item列的获取方式。

总结

通过上述方法,我们可以方便地获取DataFrame每一行的最小值及其对应的列名。这种方法简洁高效,适用于各种规模的数据集。在实际应用中,可以根据具体需求进行调整和优化。

以上就是获取行最小值及其对应列名的Python教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号