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

如何按分隔符拆分DataFrame字符列并生成二进制衍生列?

实现DataFrame多类别列的二进制独热编码(带前缀)

问题说明

我有一个名为df_cat的DataFrame,结构如下:

dput(df_cat)

structure(list(Name = c("Name1", "Name2", "Name3", "Name4", "Name5", 
"Name6"), Category = c("App", "App, Comms_2", "App, Comms, Tech", 
"App, Tech", "Comms, Tech", "BS, Tech")), class = "data.frame", row.names = c(NA, 
-6L))

需要以英文逗号(含后续空格)为分隔符拆分Category列,为每个类别生成带Category_前缀的二进制新列——1表示该行包含对应类别,0表示不包含,期望输出如下:

Name   Category_App  Category_Comms_2  Category_Tech  Category_BS
Name1  1             0                 0              0
Name2  1             1                 0              0
Name3  1             1                 1              0
Name4  1             0                 1              0
Name5  0             1                 1              0
Name6  0             0                 1              1

如何在包含2.3万行、100余种类别的数据集中高效完成这个操作?


R语言解决方案

方法1:用tidyverse工具链(易读且高效)

针对2.3万行的规模,tidyverse的处理速度完全够用,步骤清晰:

  • 拆分Category列为多行,同时保留每行的Name
  • 标记每个存在的类别为1
  • 转换回宽格式,缺失的类别自动填充0
  • 给所有类别列加上Category_前缀

代码示例:

library(tidyverse)

df_result <- df_cat %>%
  separate_rows(Category, sep = ",\\s*") %>% # 拆分时自动去除类别后的空格
  mutate(flag = 1) %>%
  pivot_wider(names_from = Category, values_from = flag, values_fill = 0) %>%
  rename_with(~paste0("Category_", .), -Name) # 仅重命名非Name的列

print(df_result)

方法2:用fastDummies包(性能更优)

如果追求更快的处理速度,fastDummies包的dummy_cols函数可以直接处理带分隔符的列,代码更简洁:

library(fastDummies)

# 先清理Category列的空格(避免生成带空格的列名)
df_cat$Category <- gsub("\\s+", "", df_cat$Category)

df_result <- dummy_cols(df_cat, 
                        select_columns = "Category",
                        split = ",",
                        remove_selected_columns = TRUE, # 移除原Category列
                        prefix = "Category_") # 指定前缀

print(df_result)

Python语言解决方案(跨语言需求)

如果用Python处理,pandas的str.get_dummies可以直接实现拆分和编码:

import pandas as pd

# 构造示例数据
df_cat = pd.DataFrame({
    "Name": ["Name1", "Name2", "Name3", "Name4", "Name5", "Name6"],
    "Category": ["App", "App, Comms_2", "App, Comms, Tech", "App, Tech", "Comms, Tech", "BS, Tech"]
})

# 拆分生成独热编码,并添加前缀
category_dummies = df_cat["Category"].str.get_dummies(sep=", ").add_prefix("Category_")
# 合并原数据的Name列和编码结果
df_result = pd.concat([df_cat[["Name"]], category_dummies], axis=1)

print(df_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:02:48