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

如何将pandas DataFrame中列表类型列拆分为多个布尔值/0-1列

解决方案

以下两种方案均可直接在原有DataFrame基础上实现列表列转布尔/0-1列的需求:

方法1:pandas内置方法(无额外依赖)

通过str.get_dummies实现,适合小数据量场景,代码更简洁:

import pandas as pd

# 你的示例DataFrame
df = pd.DataFrame({'Owner': ['Bob', 'Jane', 'Amy'],
               'Make': ['Ford', 'Ford', 'Jeep'],
               'Model': ['Bronco', 'Bronco', 'Wrangler'],
               'Sentiment': [['Meh','Red','Dirty'], ['Rusty','Sturdy'], ['Dirty','Red']],
               'Max Speed': [80, 150, 69],
              'Customer Rating': [90, 50, 91]})

# 生成0-1编码列
sentiment_dummies = df['Sentiment'].str.join('|').str.get_dummies()
# 拼接回原表,无需保留原Sentiment列可添加.drop('Sentiment', axis=1)
result = pd.concat([df, sentiment_dummies], axis=1)

方法2:基于MultiLabelBinarizer实现(适合大数据量场景)

性能优于第一种方法,适合列表标签量级较大的情况:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer

df = pd.DataFrame({'Owner': ['Bob', 'Jane', 'Amy'],
               'Make': ['Ford', 'Ford', 'Jeep'],
               'Model': ['Bronco', 'Bronco', 'Wrangler'],
               'Sentiment': [['Meh','Red','Dirty'], ['Rusty','Sturdy'], ['Dirty','Red']],
               'Max Speed': [80, 150, 69],
              'Customer Rating': [90, 50, 91]})

mlb = MultiLabelBinarizer()
sentiment_dummies = pd.DataFrame(
    mlb.fit_transform(df['Sentiment']),
    columns=mlb.classes_,
    index=df.index
)
# 如需布尔值而非0/1,可添加.astype(bool)转换
# sentiment_dummies = sentiment_dummies.astype(bool)
result = pd.concat([df, sentiment_dummies], axis=1)

两种方案输出结果完全一致,最终生成的result中会新增所有列表中出现过的标签列,对应行存在该标签则值为1,不存在则为0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:03