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

Pandas如何基于DataFrame单列数组的元素出现频率创建新列

Pandas 按列表元素生成二值标识列实现

问题说明

现有如下结构的DataFrame:

column_1     column_2
    ['a','c']            1
    ['b','c']            2
['a','b','c']            1

需要根据column_1列中存储的列表元素,新增a/b/c三个列:对应元素在该行column_1的列表中存在时赋值为1,不存在则赋值为0,期望输出结果如下:

a   b    c   column_2
1   0    1          1
0   1    1          2
1   1    1          1

实现方案

方案1:纯pandas实现(无额外依赖,推荐)

利用pandas自带的字符串哑变量方法实现,代码最简洁:

# 先将column_1的列表拼接为分隔字符串,再生成独热编码
dummy_cols = df["column_1"].str.join("|").str.get_dummies()
# 拼接编码列与原保留列,调整顺序即可得到结果
result = pd.concat([dummy_cols, df["column_2"]], axis=1)

方案2:使用sklearn的多标签二值化工具

如果后续需要做训练集/测试集的编码转换对齐,用MultiLabelBinarizer更方便:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
# 拟合所有标签并转换为二值矩阵
binary_mat = mlb.fit_transform(df["column_1"])
# 转为DataFrame后和原列拼接
dummy_cols = pd.DataFrame(binary_mat, columns=mlb.classes_)
result = pd.concat([dummy_cols, df["column_2"]], axis=1)

两种方案执行后得到的result打印效果完全匹配预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 18:27:41