Pandas遍历映射表批量创建_x/_z列值对比列报错排查
代码错误排查
你的循环代码报错核心是3个书写问题:
- 变量名拼写不一致:你定义的映射表变量名为
header_comp,循环代码中错写为header_match、header_matrch,拼写错误会导致程序找不到对应对象,触发列不存在类报错。 - 括号配对错误:对比列值的逻辑括号错位,你写的
df[header_match.iloc[i,1]==df[header_match.iloc[i,2]]会把布尔判断结果当成列名去DataFrame中索引,直接触发列查找错误。 - 列名拼接不符合预期:你需要生成
a_comp格式的列名,代码中拼接的是' comp'(comp前带空格),会生成带空格的错误列名。
可直接运行的正确代码
基础数据构造(复现测试用)
import pandas as pd # 构造原始业务数据集 df = pd.DataFrame({ 'a_x':['a','b','c'],'b_x':['a','b','c'] ,'c_x':['a','b','c'],'d_x':['a','b','c'], 'a_z':['a','b','i'],'b_z':['a','t','c'] ,'c_z':['c','c','c'],'d_z':['a','b','c'] }) # 构造列映射关系表 header_comp = pd.DataFrame({ 'original':['a','b','c','d'], '_x':['a_x','b_x','c_x','d_x'], '_z':['a_z','b_z','c_z','d_z'] })
循环实现(修正后)
for idx in range(len(header_comp)): orig_col = header_comp.iloc[idx, 0] x_col = header_comp.iloc[idx, 1] z_col = header_comp.iloc[idx, 2] # 逐行对比两列值,相等赋值1否则0 df[f'{orig_col}_comp'] = (df[x_col] == df[z_col]).astype(int)
实现效果验证
执行代码后输出的df与预期结果完全一致:
a_x b_x c_x d_x a_z b_z c_z d_z a_comp b_comp c_comp d_comp 0 a a a a a a c a 1 1 0 1 1 b b b b b t c b 1 0 0 1 2 c c c c i c c c 0 1 1 1
内容的提问来源于stack exchange,提问作者aasseeedd
相关产品推荐
相关产品推荐

