
本文档旨在介绍如何使用Python的pandas库,在一个DataFrame中查找每一行的最小值,并同时获取与该最小值关联的列名。通过示例代码,我们将演示如何高效地实现这一目标,并提供必要的解释和注意事项,帮助读者理解和应用该方法。
在数据分析中,经常需要找出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列的值。
实现步骤
确定数值列: 首先,定义包含数值的列名列表。
c = ['Value1', 'Value2', 'Value3']
查找最小值的列索引: 使用idxmin(1)方法找到每一行最小值对应的列名。1表示按行查找。
x, y = range(len(df)), df[c].idxmin(1) print(y)
输出:
0 Value2 1 Value3 2 Value1 3 Value1 dtype: 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_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
获取对应的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等。需要对代码进行修正。
修正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)注意事项
总结
通过上述方法,我们可以方便地获取DataFrame每一行的最小值及其对应的列名。这种方法简洁高效,适用于各种规模的数据集。在实际应用中,可以根据具体需求进行调整和优化。
以上就是获取行最小值及其对应列名的Python教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号