You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于嵌套列表及额外条件为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]

代码解释

  1. 构建映射字典:
    用字典推导式遍历categ中的非"Other"分组,把每个分组内的元素都映射到该分组本身,实现快速查找。
  2. 处理特殊值与生成新列:
    • df['col'].fillna('Missing'):将原列中的np.nan替换为"Missing",统一处理逻辑
    • .map(mapping):根据映射字典匹配对应的分组列表,不在映射中的值会返回NaN
    • .fillna(["Other"]):将所有未匹配到分组的NaN替换为["Other"]

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:55:22