多列If语句/For循环实现同ID跨门店补全Name字段问题求助
你梳理的匹配逻辑完全可行,以下是不同常用工具场景下的对应语法实现,均不需要对原数据集进行排序:
1. Excel 公式实现
假设你的数据列对应:A列=Store、B列=ID、C列=原Name,可在D列输入以下公式生成补全后的Name:=IF(A2="Store Blue",XLOOKUP(B2,IF(($A$2:$A$1000="Store Red")+($A$2:$A$1000="Store Green"),$B$2:$B$1000,""),IF(($A$2:$A$1000="Store Red")+($A$2:$A$1000="Store Green"),$C$2:$C$1000,""),C2),C2)
注意:需将公式中的
$A$2:$A$1000、$B$2:$B$1000、$C$2:$C$1000范围替换为你实际的数据集行数范围。
2. Python Pandas 实现
先提取Red、Green门店的ID到完整Name的映射,再批量补全Blue门店的缺失值:
import pandas as pd # 构造ID对应完整Name的映射字典 id_name_map = df[df['Store'].isin(['Store Red', 'Store Green'])].drop_duplicates('ID').set_index('ID')['Name'].to_dict() # 补全Blue门店的Name字段,不改动原数据集顺序 df['Name'] = df.apply( lambda row: id_name_map.get(row['ID'], row['Name']) if row['Store'] == 'Store Blue' else row['Name'], axis=1 )
3. SQL 实现
假设数据存储表名为store_data,可通过关联更新实现,不会改动表的原有排序:
UPDATE store_data AS blue_tbl LEFT JOIN store_data AS other_tbl ON blue_tbl.ID = other_tbl.ID AND other_tbl.Store IN ('Store Red', 'Store Green') SET blue_tbl.Name = COALESCE(other_tbl.Name, blue_tbl.Name) WHERE blue_tbl.Store = 'Store Blue';
内容的提问来源于stack exchange,提问作者hoss1186
相关产品推荐
相关产品推荐

