如何在Python中按指定行条件筛选矩阵并查找最小值及所在列
解决方案
步骤说明
- 先筛选出第2行值为1的所有列
- 在这些列的第1行中找到最小值对应的列
- 提取该列的完整数据
代码实现(以NumPy为例)
假设你的矩阵存储在arr中(注意:Python中索引从0开始,所以第1行对应arr[0],第2行对应arr[1]):
import numpy as np # 示例矩阵,模拟你的数据 arr = np.array([ [0.98, 0.941, 0.95], [0, 1, 1], [0.12, 0.210, 0.18] ]) # 1. 获取第2行(索引1)值为1的列索引 valid_cols = np.where(arr[1] == 1)[0] # 2. 从这些列中提取第1行(索引0)的数据,找到最小值的索引 min_idx_in_valid = np.argmin(arr[0][valid_cols]) target_col_idx = valid_cols[min_idx_in_valid] # 3. 提取目标列 result = arr[:, target_col_idx] print(result) # 输出: [0.941 1. 0.21 ]
问题原因分析
你用np.amin(df, axis=2)得到第2行是0,是因为axis=2是针对三维数组的轴,而你的数据是二维矩阵,轴参数使用错误;更关键的是你没有先筛选符合条件的列,直接全局取最小值会包含不符合要求的列,最终导致结果异常。
代码实现(以Pandas为例)
如果用DataFrame处理:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'Driver 1': [0.98, 0, 0.12], 'Driver 3': [0.941, 1, 0.210], 'Driver 2': [0.95, 1, 0.18] }) # 1. 筛选第2行(索引1)值为1的列 valid_cols = df.columns[df.iloc[1] == 1] # 2. 找到第1行(索引0)最小值对应的列 target_col = df.loc[0, valid_cols].idxmin() # 3. 提取目标列 result = df[target_col].values print(result) # 输出: [0.941 1. 0.21 ]
内容的提问来源于stack exchange,提问作者learning101
相关产品推荐
相关产品推荐

