如何用第二个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
相关产品推荐
相关产品推荐

