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

如何在Pandas中对含列表的列应用条件生成新列?

在Pandas中基于列表列的条件创建新列

问题场景

现有如下Pandas DataFrame,其中BRAND列的每个元素都是列表(可能为空、单个或多个元素):

import pandas as pd

df = pd.DataFrame(
    {
        "ID": [1, 2, 3, 4, 5],
        "BRAND": [[], ["LVH"], ["FER", "MER", "POR"], ["WDC", "AUD", "LVH"], ["AST"]]
    }
)

需要根据目标列表target_list = ["LVH", "WDC"]创建新列FLAG:若BRAND的列表中包含目标列表的至少一个元素,标记为Y,否则标记为N,最终得到如下结果:

ID            BRAND FLAG
0   1               []    N
1   2            [LVH]    Y
2   3  [FER, MER, POR]    N
3   4  [WDC, AUD, LVH]    Y
4   5            [AST]    N

解决方案

这里提供几种高效的实现方式:

方法1:集合交集 + 列表推导式(推荐,大数据量下效率最高)

利用集合的快速查找特性,判断每个BRAND列表与目标集合是否存在交集:

target_set = set(target_list)
df["FLAG"] = ["Y" if target_set.intersection(brand) else "N" for brand in df["BRAND"]]

集合的交集操作时间复杂度远低于列表遍历,数据量越大,这种方法的优势越明显。

方法2:Pandas原生 explode + 分组聚合

通过explode拆分列表为多行,再分组判断每组是否存在目标元素:

df["FLAG"] = df.explode("BRAND")["BRAND"].isin(target_list).groupby(level=0).any().map({True: "Y", False: "N"})

这种方法完全基于Pandas的向量化操作,适合习惯使用Pandas原生API的场景。

方法3:apply 匿名函数(代码简洁,小数据量适用)

用apply遍历每个列表,判断是否有目标元素:

df["FLAG"] = df["BRAND"].apply(lambda x: "Y" if any(item in target_list for item in x) else "N")

代码直观易懂,但apply本质是逐行遍历,大数据量下性能不如前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:55:24