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

如何按每行不同的列名提取DataFrame中的单元格值?

提取DataFrame中行匹配指定列名的单元格值

问题场景

给定如下DataFrame,需要为每一行提取列名与最后一列yr值一致的单元格数值:

import pandas as pd

d = {'2015': [3, 11, 2], '2016': [14, 5, 6], '2017': [1, 7, 12], 'yr': [2016, 2015, 2017]}
df = pd.DataFrame(data=d, columns=['2015', '2016', '2017', 'yr'], index=['d1', 'd2', 'd3'])

期望结果:output = [14, 11, 12]

原代码问题分析

你尝试的单行代码output1 = df.loc['d1'][df.columns == df.loc['d1', 'yr']]无效,原因有两点:

  • 仅处理了d1单行,未覆盖所有行
  • yr列的值是整数类型(如2016),而列名是字符串类型(如'2016'),类型不匹配导致匹配失败

解决方案

方法1:使用lookup方法(简洁高效)

# 将yr列的整数转为字符串,匹配列名类型
output = df.lookup(df.index, df['yr'].astype(str))

执行后output为array([14, 11, 12]),可通过tolist()转为列表。

方法2:逐行处理(直观易懂)

output = df.apply(lambda row: row[str(row['yr'])], axis=1).tolist()

逐行将yr值转为字符串作为列名,提取对应单元格值,最终得到列表[14, 11, 12]。

修正单行处理代码

如果仅需处理单行,修改类型匹配即可:

output1 = df.loc['d1'][df.columns == str(df.loc['d1', 'yr'])]

此时output1会返回14。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:47:12