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

如何用Python的pandas将单列存储的多选题转换为可读分析数据

单列存储的多选题拆分为多列的Pandas实现方案

最简原生实现(无需提前拆分列表)

Pandas内置的str.get_dummies方法原生支持指定分隔符拆分多选项列并生成哑变量列,比手动写判断逻辑效率更高,代码如下:

import pandas as pd

# 1. 对多选题列直接生成哑变量,指定分隔符为换行符
dummies = df.iloc[:, 1].str.get_dummies(sep='\n').astype(bool)

# 2. 补全所有可选选项,避免样本中未出现的选项缺失
all_options = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for opt in all_options:
    if opt not in dummies.columns:
        dummies[opt] = False
# 按预设顺序重排列
dummies = dummies[all_options]

# 3. 与原表拼接得到最终结果
result = pd.concat([df, dummies], axis=1)

如果后续需要做数值计算,不需要布尔值的话,去掉.astype(bool)即可,方法默认输出0/1的整型值。

已拆分为列表后的处理方案

如果你已经提前执行了df.iloc[:,1].str.split('\n')将列转为列表格式,可以用explode+透视的方式处理:

# 将列表列拆分为多行
df_exploded = df.explode(df.columns[1])
# 新增标记列用于透视
df_exploded['mark'] = True
# 透视回宽表,缺失值填充为False
pivot_df = df_exploded.pivot(
    index=['ID', df.columns[1]], 
    columns=df.columns[1], 
    values='mark'
).fillna(False).reset_index().rename_axis(columns=None)

# 同上补全未出现的选项列即可
all_options = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for opt in all_options:
    if opt not in pivot_df.columns:
        pivot_df[opt] = False
pivot_df = pivot_df[['ID', df.columns[1]] + all_options]

两种方案的输出结果完全一致,前者代码更简洁适合纯转换需求,后者可以得到拆分后的中间长表,适合做选项频次统计类的额外分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:15:06