如何按每行不同的列名提取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
相关产品推荐
相关产品推荐

