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

如何将Pandas存储列表的列转换为0/1哑变量列且保留原有行数?

解决方法

你原有思路的问题在于stack操作会将每个拆分出的流派单独转为一行,所以总行数变为所有流派元素的总数量,只需要补充按原行索引聚合的步骤即可,同时要注意处理拆分出的多余空格和空字符串。

完整实现代码:

import pandas as pd

# 原始DataFrame构造
dfGenres = pd.DataFrame({'Genres':["[Action, Romance, Mystery, Animal]", "[Bromance, Drama, Mystery]", "[Horror, Monsters, Shounen, Action]"]})

# 核心转换代码
genre_dummies = pd.get_dummies(
    dfGenres["Genres"].str.split('[\[,\]]', expand=True).stack().str.strip()
).groupby(level=0).sum()

# 若需要保留原始Genres列,可直接拼接
dfGenres = dfGenres.join(genre_dummies)

代码说明

  • str.split('[\[,\]]', expand=True):按[、,、]三个字符拆分字符串,每一个拆分结果存为单独列
  • stack():将多列的拆分结果转为行结构,第一层索引保留原始的行号
  • str.strip():清除每个流派字符串前后的空格,避免空格导致相同流派被识别为不同字段
  • groupby(level=0).sum():按原始行号分组求和,将同一原始行的所有流派哑变量合并为一行,结果值为1代表该行包含对应流派,0代表不包含,最终行数和原始DataFrame完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:02