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

Python Pandas:基于源列不同值高效创建布尔型新列的方法

高效拆分DataFrame列并生成布尔标记列的方法

嘿,这个问题我太有发言权了!手动创建列再挨个写apply函数确实效率极低,尤其是数据量上去之后完全扛不住。其实Pandas早就给我们准备好了高效的向量化解决方案,分两种常见情况给你说:

情况1:源列每个单元格是单一类别值

如果你的源列每行只有一个独立的类别(比如每行是"苹果"/"香蕉"/"橙子"这种单一标签),直接用pd.get_dummies()就能一键搞定:

import pandas as pd

# 示例数据
df = pd.DataFrame({"水果": ["苹果", "香蕉", "苹果", "橙子", "香蕉"]})

# 自动生成所有唯一值对应的布尔列,默认用0/1填充
dummies_df = pd.get_dummies(df["水果"], prefix="类别")

# 合并回原DataFrame
result_df = pd.concat([df, dummies_df], axis=1)

执行后你会得到类别_苹果、类别_香蕉、类别_橙子这几列,对应行的类别位置会被标记为1,其余为0。这个方法是Pandas底层优化的向量化操作,比手动apply快几个数量级。

情况2:源列每个单元格包含多个类别值

如果你的源列单元格是用分隔符(比如逗号、空格)分隔的多标签(比如"苹果,香蕉"),用Series的str.get_dummies()方法更合适:

import pandas as pd

# 示例数据
df = pd.DataFrame({"水果": ["苹果,香蕉", "香蕉", "苹果,橙子", "橙子"]})

# 指定分隔符,自动拆分并生成布尔列
dummies_df = df["水果"].str.get_dummies(sep=",")

# 合并回原DataFrame
result_df = pd.concat([df, dummies_df], axis=1)

这个方法会自动识别所有出现过的标签,生成对应的列,每个标签在对应行存在就标记为1,否则为0,同样是完全向量化的操作,效率拉满。

额外小技巧

如果你需要把0/1转换成严格的布尔值(True/False),只需要在生成的结果后加上.astype(bool)即可,比如:

dummies_df = pd.get_dummies(df["水果"], prefix="类别").astype(bool)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:14:38