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

如何基于Pandas DataFrame中逗号分隔列的值新增布尔列?

嘿,这个需求我经常碰到,给你分享两个实用的Pandas解决方案,都是原生操作,省心又高效:

先构造个示例数据方便演示

首先咱们先模拟你的数据结构,方便后续测试:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'tags': ['a,b,c', 'a,b,e', 'c,d', 'a']
})

方法1:用str.get_dummies快速生成(最简洁)

这是最直接的方法,Pandas的str.get_dummies专门用来处理这种分隔字符串的哑变量生成,一步到位:

# 生成以逗号分隔的哑变量矩阵(0/1值)
dummies_matrix = df['tags'].str.get_dummies(sep=',')
# 将0/1转换为True/False布尔值
bool_columns = dummies_matrix.astype(bool)
# 把新列合并回原DataFrame
result_df = pd.concat([df, bool_columns], axis=1)

运行后你会得到这样的结果:

tags      a      b      c      d      e
0  a,b,c   True   True   True  False  False
1  a,b,e   True   True  False  False   True
2    c,d  False  False   True   True  False
3      a   True  False  False  False  False

这个方法会自动提取所有出现过的标签作为新列,完全不用手动指定,非常适合需要覆盖所有可能标签的场景。


方法2:自定义目标列(更灵活)

如果你只需要生成指定的几列(比如只关心a、b、c,不管其他标签),可以用这个方法:

# 定义你需要生成的目标标签列
target_tags = ['a', 'b', 'c']

# 定义一个函数,检查每行的标签是否包含目标标签
def check_target_tags(row):
    # 把逗号分隔的字符串转成列表
    tag_list = row['tags'].split(',')
    # 逐个检查目标标签是否在列表里,返回Series
    return pd.Series([tag in tag_list for tag in target_tags], index=target_tags)

# 对每行应用函数生成布尔列
bool_columns = df.apply(check_target_tags, axis=1)
# 合并回原DataFrame
result_df = pd.concat([df, bool_columns], axis=1)

这个方法的好处是可以精准控制生成的列,哪怕某些标签在原数据里没出现,也能生成对应的列(值全为False)。


小提示

如果你的原始字符串里带有空格(比如'a, b, c'这种格式),记得先预处理去掉空格:

df['tags'] = df['tags'].str.replace(' ', '')

避免生成带空格的列名,后续操作更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:51