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

如何对多列数据批量应用MultiLabelBinarizer?

批量对多列应用MultiLabelBinarizer的解决方法

直接传入多列DataFrame调用MultiLabelBinarizer.fit_transform()会失败,因为该方法要求输入是一维可迭代对象(每个元素是标签集合,比如列表、元组),而多列DataFrame是二维结构,不符合输入要求。下面提供两种可行的批量处理方案:

方案1:合并多列为单标签列后统一二值化

适合需要将所有列的标签合并,生成包含所有出现过的标签的统一二值化矩阵的场景:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer

# 示例数据(替换为你的真实数据)
df = pd.DataFrame({
    'One': [['a', 'b'], ['c'], []],
    'Two': [['b', 'd'], ['a'], ['c']],
    'Twenty': [['e'], [], ['a', 'e']]
})

cols = ['One', 'Two', 'Twenty']  # 你的20列列表

# 把每行的多列标签合并成一个扁平列表
combined_labels = df[cols].apply(lambda row: [item for sublist in row for item in sublist], axis=1)

# 应用MultiLabelBinarizer
mlb = MultiLabelBinarizer()
binarized_df = pd.DataFrame(
    mlb.fit_transform(combined_labels),
    columns=mlb.classes_,
    index=df.index
)

方案2:对每列单独二值化后合并结果

适合需要保留原列维度信息(区分不同列的相同标签)的场景,最终列名会带上原列前缀:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer

cols = ['One', 'Two', 'Twenty']
mlb = MultiLabelBinarizer()
binarized_dfs = []

for col in cols:
    # 对当前列单独二值化,给标签列名加上原列前缀
    binarized_col = pd.DataFrame(
        mlb.fit_transform(df[col]),
        columns=[f"{col}_{cls}" for cls in mlb.classes_],
        index=df.index
    )
    binarized_dfs.append(binarized_col)

# 合并所有二值化结果
binarized_df = pd.concat(binarized_dfs, axis=1)

额外提示

  • 如果你的列存储的是字符串格式的标签(比如用逗号分隔),需要先转换为列表:df[col] = df[col].str.split(',')
  • 方案1中,同一行多列出现的重复标签,二值化时会自动视为单个标签,不影响最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:55:20