Python如何将pandas筛选后列数据保留行号复制到新空白列
基础解决方案(单条件赋值)
你不需要单独把筛选结果切分为新的DataFrame,直接用pandas的条件赋值即可保留原行号写入新列:
import pandas as pd color_colors = ['Blanco negro rojo','Gris multicolor','Negro','Negro/Gris'] # 符合颜色列表的行,将原Color列值写入New_Color列,不符合的行留空 data.loc[data['Color'].isin(color_colors), 'New_Color'] = data['Color']
批量规整多列方案
针对你需要扫描3个原始列、分别匹配三类参考值写入3个新列的需求,可以把逻辑封装成通用规则,避免重复写代码:
# 第一步:定义匹配规则,替换下方的参考值列表为你自己的实际值 match_rules = { # 格式:新列名: (匹配参考值列表, 需要扫描的原始列列表) "New_Color": ( ["Blanco negro rojo", "Gris multicolor", "Negro", "Negro/Gris"], ["Color", "Size", "Type"] ), "New_Size": ( ["S", "M", "L", "XL", "2XL"], # 替换为你的尺寸参考列表 ["Color", "Size", "Type"] ), "New_Type": ( ["Camiseta", "Pantalón", "Zapatos"], # 替换为你的类型参考列表 ["Color", "Size", "Type"] ) } # 第二步:初始化三个新列为空值 for new_col in match_rules: data[new_col] = pd.NA # 第三步:逐列扫描匹配,自动写入对应新列 for new_col, (ref_list, raw_cols) in match_rules.items(): for raw_col in raw_cols: # 仅新列当前为空时才写入,避免覆盖已匹配到的值 data.loc[ data[new_col].isna() & data[raw_col].isin(ref_list), new_col ] = data[raw_col]
执行后所有新列的行号和原DataFrame完全一致,已匹配到的取值会自动填充,未匹配的行留空。
内容的提问来源于stack exchange,提问作者laurelian
相关产品推荐
相关产品推荐

