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

如何用第二个DataFrame的映射标签替换第一个DataFrame的对应值

你可以用Pandas按以下逻辑实现:

首先将DF2的映射关系整理为按变量分组的嵌套字典,再对应替换DF1的列值即可,参考代码如下:

import pandas as pd

# ------------- 样例数据构造(你已有数据可跳过这部分)-------------
df1 = pd.DataFrame({
    'id': [1,2,3,4,5],
    'q1': [1,1,2,2,1],
    'q2_1': [1,2,3,3,1],
    'q2_2': [1,2,3,3,3]
})

df2 = pd.DataFrame({
    'var': ['q1','q1','q2','q2','q2'],
    'num': [1,2,1,2,3],
    'val': ['male','female','one','two','three']
})

# ---------------------- 核心处理逻辑 ----------------------
# 1. 生成变量对应的映射字典
var_mapping = df2.groupby('var').apply(lambda x: x.set_index('num')['val'].to_dict()).to_dict()

# 2. 批量替换列值
# 替换q1列
df1['q1'] = df1['q1'].map(var_mapping['q1'])
# 替换所有q2前缀的列
for col in df1.columns[df1.columns.str.startswith('q2_')]:
    df1[col] = df1[col].map(var_mapping['q2'])

# 输出结果
print(df1)

运行后输出的df1就是你需要的DF3:

id      q1   q2_1   q2_2
0   1    male    one    one
1   2    male    two    two
2   3  female  three  three
3   4  female  three  three
4   5    male    one  three

如果需要保留未匹配到的原始值,可以把map方法换成replace方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:51:03