如何用一行优雅代码将pandas分类列拆分为布尔值列?
回答
当然有办法实现你的需求!Pandas提供了非常优雅的工具来处理这种分类列转布尔/数值列的场景,也就是独热编码(One-Hot Encoding),完全可以一行代码搞定你的具体需求。
针对你给出的DataFrame场景,一行实现的代码如下:
df2 = pd.get_dummies(df['A'], prefix='', prefix_sep='').astype(int)
如果希望保留原列"A",可以改成:
df_with_original = pd.get_dummies(df, columns=['A'], prefix='', prefix_sep='').astype(int)
代码解释:
pd.get_dummies()是Pandas专门用于生成独热编码的函数,它会自动识别列中的所有类别,为每个类别创建新列;prefix=''和prefix_sep=''用来去掉默认的列名前缀(比如默认会生成"A_0"这种列名),让新列名直接是类别值0、1、2;astype(int)把函数默认生成的布尔值(True/False)转换成你需要的整数0和1,和目标df2的格式完全匹配。
举个实际运行的例子:
输入你的原始df:
A 0 1 1 2 2 1 3 2 4 2 5 2 6 0 7 1 8 0
运行第一行代码后得到的df2就是:
0 1 2 0 0 1 0 1 0 0 1 2 0 1 0 3 0 0 1 4 0 0 1 5 0 0 1 6 1 0 0 7 0 1 0 8 1 0 0
完全符合你想要的结果,而且比手动写apply函数简洁高效得多,尤其是当类别数量较多时,这个方法的优势会更明显。
内容的提问来源于stack exchange,提问作者George Pamfilis
相关产品推荐
相关产品推荐

