Python Pandas中如何拼接多个if语句返回的字符串生成新列
实现方案
你之前操作报错的核心原因是:pandas内置的join方法是用于多表关联合并的,和你需要的字符串拼接逻辑完全不匹配,因此会出现报错、数据错乱的问题。
以下两种方案均可直接在Google Colab环境中运行,pandas为Colab预装依赖,无需额外安装。
方法1:行遍历实现(逻辑直观,适合小数据量、新手使用)
该方法逐行判断每个条件列的值,符合要求就把对应问题说明加入结果后拼接,和Excel中多if拼接的逻辑完全一致。
import pandas as pd # --------------- 配置部分,按你的实际情况修改 ---------------- # 1. 如果你要判断的列名就是要显示的问题说明,直接填列名列表即可 check_cols = ["手机号为空", "地址不完整", "邮箱格式错误", "身份未验证"] # 2. 如果列名和要显示的问题说明不一致,用字典做映射,注释掉上面一行,打开下面的配置 # col_to_desc = { # "col1": "手机号为空", # "col2": "地址不完整", # "col3": "邮箱格式错误", # "col4": "身份未验证" # } # check_cols = col_to_desc.keys() empty_tip = "无待修复项" # 没有问题时显示的内容 # --------------------------------------------------------- # 逐行处理逻辑 def merge_repair_items(row): # 收集所有值为Yes的问题说明 items = [] for col in check_cols: if row[col] == "Yes": # 用映射的话就改成 col_to_desc[col] items.append(col) # 拼接结果 return ",".join(items) if len(items) > 0 else empty_tip # 生成新的待修复事项列 df["待修复事项"] = df.apply(merge_repair_items, axis=1)
方法2:向量化操作(性能更高,适合10万行以上的大数据集)
该方法避免了逐行遍历的性能损耗,处理大数据量时速度远快于方法1。
import pandas as pd # --------------- 配置部分,按你的实际情况修改 ---------------- col_to_desc = { "col1": "手机号为空", "col2": "地址不完整", "col3": "邮箱格式错误", "col4": "身份未验证" } empty_tip = "无待修复项" # --------------------------------------------------------- # 把所有值为Yes的位置替换为对应的问题说明,No替换为空字符串 temp_df = df[col_to_desc.keys()].replace("Yes", pd.Series(col_to_desc)).replace("No", "") # 按行拼接所有非空内容,清理多余的逗号 df["待修复事项"] = temp_df.agg(",".join, axis=1).str.strip(",").replace("", empty_tip)
内容的提问来源于stack exchange,提问作者Marcus Catan
相关产品推荐
相关产品推荐

