Pandas基于多列表替换空格匹配列名后按行求和的实现方法
问题修正说明
原有代码存在3处核心错误:
- 变量未定义:
persons没有提前声明,直接放入yup会触发名称错误 - 循环逻辑冗余:
xup存储要生成的新列名,yup存储对应每个新列的匹配关键词列表,二者是一一对应关系,不需要嵌套遍历 - 求和逻辑错误:原代码的列表推导式遍历了整个
yup,而非当前组的匹配列表,同时没有过滤DataFrame中不存在的列,会导致匹配失败报错
修正后可运行代码
import pandas as pd fruits = ['apple pie', 'watermelon pie', 'banana pie'] places = ['Hong Kong', 'Boston', 'New York'] df = pd.DataFrame({ 'apple_pie': [3, 4, 5], 'watermelon_pie': [3, 4, 5], 'New_York': [6, 7, 8] }) # 若需要保留persons可提前定义为空列表,此处直接移除未定义变量 xup = ['fruits', 'places'] yup = [fruits, places] # 同步遍历新列名和对应的匹配规则列表 for new_col, match_list in zip(xup, yup): # 替换空格后筛选当前列表中在df里真实存在的列 target_cols = [item.replace(" ", "_") for item in match_list] exist_cols = [col for col in target_cols if col in df.columns] # 按行求和生成新列 df[new_col] = df[exist_cols].sum(axis=1)
运行结果
apple_pie watermelon_pie New_York fruits places 0 3 3 6 6 6 1 4 4 7 8 7 2 5 5 8 10 8
和预期输出完全一致。
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

