如何匹配DataFrame的X列值与列名并提取对应列的数值?
问题解决:根据列名匹配提取DataFrame对应值
问题说明
现有示例DataFrame如下:
A B C X result 1 2 3 B 2 5 6 7 A 5 8 9 1 C 1
需求为:根据X列的取值匹配对应的列名,提取该列的数值生成result列。
解决方案
方法1:使用df.lookup()(高效简洁,适用于pandas <1.2.0)
lookup是pandas专门用于按行和列索引提取值的方法,直接指定行索引和X列的列名即可快速生成结果:
import pandas as pd # 构造示例数据 data = { 'A': [1, 5, 8], 'B': [2, 6, 9], 'C': [3, 7, 1], 'X': ['B', 'A', 'C'] } df = pd.DataFrame(data) # 生成result列 df['result'] = df.lookup(df.index, df['X'])
方法2:使用apply+loc(通用兼容,适合全版本pandas)
如果你的pandas版本较高(lookup已被标记为废弃),可以用apply逐行处理,通过loc定位对应列的值:
df['result'] = df.apply(lambda row: row.loc[row['X']], axis=1)
这个方法逻辑直观,容易理解,适合小数据集或需要自定义扩展的场景。
方法3:使用melt+merge(灵活扩展,适合复杂场景)
通过将宽表转窄表,再合并匹配的方式实现,适合需要处理更复杂匹配逻辑的场景:
# 将A/B/C列转成窄表结构 melted_df = df.melt( id_vars=['X'], value_vars=['A', 'B', 'C'], var_name='match_col', value_name='result' ) # 只保留匹配成功的行,再合并回原表 df = df.merge( melted_df[melted_df['match_col'] == melted_df['X']], on='X', how='left' )
内容的提问来源于stack exchange,提问作者geaa
相关产品推荐
相关产品推荐

