Pandas基于双条件实现不同DataFrame之间的值映射方法
双向匹配主客队对应主场优势值的解决方案
你当前用的map方法只支持单维度的键值映射,无法同时匹配主客队两个维度的条件,可选用以下两种方案实现需求:
方案1:逐行索引匹配(适合小数据量场景)
先将主场优势表df的索引设置为主队列,再逐行读取df1的主客队信息,直接索引到对应值:
# 预先设置df的索引为主队,避免循环中重复设置索引浪费性能 df_hfa = df.set_index('Home Team') # 逐行匹配主客队对应的主场优势值 df1['hfa'] = df1.apply(lambda row: df_hfa.loc[row['Home Team'], row['Away Team']], axis=1)
方案2:宽表转长表后合并(适合大数据量场景,性能更高)
如果你的数据量较大,apply逐行处理效率偏低,可以先将宽格式的df转为长格式,再通过两列主键合并到df1中:
# 将df转为「主队-客队-主场优势」的长表结构 df_long = df.melt( id_vars='Home Team', var_name='Away Team', value_name='hfa' ) # 基于主客队两列合并数据,left join避免丢失df1的原有数据 df1 = df1.merge(df_long, on=['Home Team', 'Away Team'], how='left')
注意:如果运行后出现
NaN值,请先检查两张表的球队名称是否存在拼写差异、大小写不一致、多余空格等匹配问题。
内容的提问来源于stack exchange,提问作者Pmannn
相关产品推荐
相关产品推荐

