如何在Pandas中基于层级ID生成对应层级名称列?
解决方法
1. 构建ID-名称映射字典
从现有数据中提取所有层级ID与对应Name的唯一映射关系(每个ID对应的名称是固定的,不受所在层级影响):
# 筛选所有带"Level"和"ID"的列 id_cols = [col for col in df.columns if 'Level' in col and 'ID' in col] # 拼接各层级ID与Name的配对数据 mapping_dfs = [] for col in id_cols: temp = df[[col, 'Name']].rename(columns={col: 'ID'}) mapping_dfs.append(temp) # 合并后去重,转成字典用于快速映射 id_name_map = pd.concat(mapping_dfs).drop_duplicates(subset='ID').set_index('ID')['Name'].to_dict()
2. 替换层级ID为对应名称
遍历每个ID列,用映射字典替换值,同时修改列名为对应Name格式,不需要原ID列可直接删除:
for col in id_cols: # 生成新列名并替换值 new_col = col.replace('ID', 'Name') df[new_col] = df[col].map(id_name_map) # 可选:删除原ID列 df.drop(col, axis=1, inplace=True)
特殊情况处理
- 若存在无对应Name的ID(比如Path中的ID未出现在层级列中),可给空值填充默认值:
df[new_col] = df[col].map(id_name_map).fillna('未匹配到名称')
- 注意ID类型与映射字典键的一致性:查看
df.info()确认ID列类型,若为字符串则确保字典键也是字符串,可通过df[col].astype(str)转换后再映射。
内容的提问来源于stack exchange,提问作者emil
相关产品推荐
相关产品推荐

