You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现:按行返回最小值及其对应左侧列关联项

提取DataFrame每行最小值及对应左侧关联项

我已经实现了按行返回DataFrame中的最小值,但还想同时返回该最小值对应的关联项——也就是最小值所在列左侧紧邻列的内容。

示例DataFrame

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

期望输出

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

解决方案

利用列名的对应关系(ValueX对应左侧的ItemX),通过字符串替换拿到关联项的列名,再用lookup提取值:

c = ['Value1', 'Value2', 'Value3']
# 获取每行最小值所在的Value列名
min_value_cols = df[c].idxmin(1)
# 转换为对应的Item列名
min_item_cols = min_value_cols.str.replace('Value', 'Item')

# 提取最小值和关联项
df['Min_Value'] = df.lookup(df.index, min_value_cols)
df['Min_Item'] = df.lookup(df.index, min_item_cols)

# 调整列顺序(可选,匹配期望输出的列顺序)
df = df[['Item1', 'Value1', 'Item2', 'Value2', 'Item3', 'Value3', 'Min_Item', 'Min_Value']]
print(df)

说明

  • min_value_cols.str.replace('Value', 'Item'):根据列名的命名规则,直接将最小值所在的Value列转换为对应的Item列。
  • df.lookup():通过行索引和列名的组合,高效提取对应位置的值,比直接操作df.values更简洁易读。

内容的提问来源于stack exchange,提问作者tonydanza123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:13:34