如何基于嵌套列表及额外条件为Pandas DataFrame创建新列?
为Pandas DataFrame创建新列的简洁方法
问题描述
需要基于DataFrame某列的值是否存在于嵌套列表中创建新列,同时满足:
- 将
np.nan视为"Missing" - 不在嵌套列表中的值归为"Other"
给定数据:
import pandas as pd import numpy as np df = pd.DataFrame({ "col": ["A", "B", "D", "G", "C", np.nan, "H"]}) categ = [["A", "D"], ["Missing", "C"], ["Other"]]
期望生成包含NewCol的结果DataFrame,每个值对应到所属的分组列表。
简洁解决方案
核心思路是先构建值到分组列表的映射字典,再结合fillna和map快速生成新列:
# 构建值与对应分组的映射字典 mapping = {val: group for group in categ if group != ["Other"] for val in group} # 处理NaN并生成新列 df['NewCol'] = df['col'].fillna('Missing').map(mapping).fillna(["Other"])
运行后得到的结果:
col NewCol 0 A [A, D] 1 B [Other] 2 D [A, D] 3 G [Other] 4 C [Missing, C] 5 NaN [Missing, C] 6 H [Other]
代码解释
- 构建映射字典:
用字典推导式遍历categ中的非"Other"分组,把每个分组内的元素都映射到该分组本身,实现快速查找。 - 处理特殊值与生成新列:
df['col'].fillna('Missing'):将原列中的np.nan替换为"Missing",统一处理逻辑.map(mapping):根据映射字典匹配对应的分组列表,不在映射中的值会返回NaN.fillna(["Other"]):将所有未匹配到分组的NaN替换为["Other"]
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

