如何在Pandas中依据动态列索引跨DataFrame提取对应值?
解决方案:根据reference列从另一个DataFrame匹配对应值
方法1:使用DataFrame.lookup(高效推荐)
lookup是pandas专门用于按行、列标签匹配取值的方法,效率优异,适合处理较大数据集:
# df2的列名为字符串类型,需将df1的reference转为字符串以匹配列名 df1['output'] = df2.lookup(df1.index, df1['reference'].astype(str))
方法2:使用apply逐行匹配(直观易懂)
如果数据量不大,apply的逻辑更直白,适合快速验证需求:
df1['output'] = df1.apply( lambda row: df2.loc[row.name, str(row['reference'])], axis=1 )
方法3:转置合并(灵活通用)
将df2转为长格式后通过合并操作实现匹配,适合需要扩展后续逻辑的场景:
# 将df2转换为长格式 df2_melted = df2.reset_index().melt( id_vars='date', var_name='reference', value_name='output' ) # 统一reference的类型,与df1匹配 df2_melted['reference'] = df2_melted['reference'].astype(int) # 合并df1与转换后的df2 df1 = df1.reset_index().merge(df2_melted, on=['date', 'reference']).set_index('date')
执行任意上述方法后,df1会生成期望的结果:
reference output date 2023-01-01 1 9 2023-01-02 2 5 2023-01-03 3 7 2023-01-04 4 4
内容的提问来源于stack exchange,提问作者younggotti
相关产品推荐
相关产品推荐

