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

如何将Dataframe列中的列表拆分到指定命名列并生成0-1统计矩阵

高效实现方案(适配百万行级数据,无手动循环)

两种方案均为向量化实现,底层基于C运算,性能远高于自定义循环逻辑:

方案1:使用sklearn.MultiLabelBinarizer(推荐,性能最优)

专门针对多标签二值化场景设计,直接输出0-1矩阵:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer

# 初始化多标签二值化工具
mlb = MultiLabelBinarizer()
# 拟合所有标签并生成0-1矩阵
one_hot_arr = mlb.fit_transform(df['data'])
# 转换为DataFrame,列名即为标签名
one_hot_df = pd.DataFrame(one_hot_arr, columns=mlb.classes_, index=df.index)
# 拼接日期列得到最终结果
final_01_matrix = pd.concat([df['date'], one_hot_df], axis=1)

如果需要生成中间的标签值填充、缺失为NaN的版本,追加以下代码即可:

mid_val_df = one_hot_df.replace(1, pd.Series(one_hot_df.columns, one_hot_df.columns)).replace(0, float('nan'))
mid_result = pd.concat([df['date'], mid_val_df], axis=1)

方案2:使用Pandas原生str.get_dummies(无额外依赖)

不需要引入第三方库,纯Pandas实现:

# 将列表拼接为无重复分隔符的字符串,再做独热编码
one_hot_df = df['data'].str.join('|').str.get_dummies()
# 拼接日期列
final_01_matrix = pd.concat([df['date'], one_hot_df], axis=1)

注意事项

如果你的data列当前为字符串格式(而非Python列表),需要先做格式转换:

import ast
# 安全转换字符串列表为Python列表,性能远高于普通eval
df['data'] = df['data'].apply(ast.literal_eval)

你之前使用pd.DataFrame(df['data'].to_list())的逻辑是按列表元素的位置对齐列,而非按标签值对齐,因此无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:54:03