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
相关产品推荐
相关产品推荐

