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

如何利用另一DataFrame的列最大值索引提取pandas DataFrame值?

问题分析与解决方案

你当前使用df1.loc[df2.idxmax()]得到整行数据,是因为loc是按行索引提取整行,而你需要的是每一列对应df2同列最大值所在行的单个值(即行列一一匹配的精准取值)。以下是几种可行的实现方法:


方法1:用DataFrame.lookup(最直接的行列匹配)

lookup方法可以接收行索引数组和列索引数组,直接返回对应交叉位置的元素。df2.idxmax()的值是行索引,索引是列名,刚好符合参数要求:

result = df1.lookup(df2.idxmax().values, df2.idxmax().index)
print(result)  # 输出: [3 2 1 -1]

方法2:按列遍历匹配

通过apply对每一列单独处理,提取对应df2列最大值行的数值:

result = df1.apply(lambda col: col[df2[col.name].idxmax()], axis=0).tolist()
print(result)  # 输出: [3, 2, 1, -1]

方法3:用numpy底层索引(大数据量下更高效)

利用numpy的数组索引直接定位,适合处理大规模数据:

import numpy as np
# 获取df2每列最大值的行位置(0/1/2对应索引A/B/C)
row_indices = df2.values.argmax(axis=0)
# 生成列位置数组(0到3对应列a/b/c/d)
col_indices = np.arange(df1.shape[1])
# 提取对应位置的值
result = df1.values[row_indices, col_indices]
print(result)  # 输出: [3 2 1 -1]

原方法失效原因

df1.loc[df2.idxmax()]会将idxmax返回的每个行索引(C、A、B、A)依次作为行标签提取整行数据,因此得到的是4行完整记录,而非你需要的每列单个目标值。

内容的提问来源于stack exchange,提问作者Mate de Vita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:20:53