
本文档旨在介绍如何使用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
微信扫一扫
支付宝扫一扫