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

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

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

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

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

示例代码

假设我们有以下DataFrame:

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

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(df)

输出:

  Item1  Value1 Item2  Value2 Item3  Value30     A       1     F       0     K     2.71     B       4     G       4     L     3.42     C       5     H       8     M     6.23     D       7     I      12     N     8.1

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

实现步骤

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

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

查找最小值的列索引: 使用idxmin(1)方法找到每一行最小值对应的列名。1表示按行查找。

x, y = range(len(df)), df[c].idxmin(1)print(y)

输出:

0    Value21    Value32    Value13    Value1dtype: object

获取最小值: 使用df.values和df.columns.get_indexer_for(y)方法获取最小值。

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

输出:

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

获取对应的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_Item0     A       1     F       0     K     2.7        0.0        F1     B       4     G       4     L     3.4        3.4        L2     C       5     H       8     M     6.2        5.0    Item13     D       7     I      12     N     8.1        7.0    Item1

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

修正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_Item0     A       1     F       0     K     2.7        0.0        F1     B       4     G       4     L     3.4        3.4        L2     C       5     H       8     M     6.2        5.0        C3     D       7     I      12     N     8.1        7.0        D

完整代码

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],   })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教程的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 16:04:04
下一篇 2025年12月14日 16:04:19

相关推荐

发表回复

登录后才能评论
关注微信