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

基于month列及ref字段匹配两个DataFrame实现值映射的Pythonic方法

Pythonic高性能实现方案

推荐直接使用Pandas原生的宽表转换+关联逻辑,全程无自定义循环,性能远高于嵌套循环、列表推导或apply类实现,代码易维护:

import pandas as pd

# 1. 将宽表df_A转换为长表,对齐df_B的关联字段格式
df_A_long = df_A.melt(
    id_vars="month",  # 保留month作为关联键
    var_name="ref",  # 原df_A的列名转为ref字段,匹配df_B的ref列
    value_name="result"  # 原df_A的列值转为result字段,直接对应目标列
)

# 2. 双字段关联直接得到结果,默认左关联保留df_B所有行
df_B = df_B.merge(df_A_long, on=["month", "ref"], how="left")

如果需要保留df_B原有的行顺序和索引,可以用以下写法:

df_B = (
    df_B.reset_index()
    .merge(df_A_long, on=["month", "ref"], how="left", sort=False)
    .set_index("index")
    .sort_index()
)

小数据量备选方案

如果df_A数据量很小,也可以用嵌套字典映射的方式实现,代码更简洁但性能略低于上述向量化方案:

# 构建 month -> {ref: value} 的嵌套映射字典
month_ref_map = df_A.set_index("month").to_dict("index")
# 逐行映射得到结果
df_B["result"] = df_B.apply(
    lambda x: month_ref_map.get(x["month"], {}).get(x["ref"], pd.NA),
    axis=1
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:57:04