如何将Pandas DataFrame列表列的取值转为列名并填充0/1标识
实现方法
这里提供两种常用的实现方案,都可以直接得到你需要的结果:
方案1:使用str.get_dummies(代码最简洁,运行效率高)
如果你的values列存储的列表元素不含|这类特殊分隔符,直接用核心代码就能完成转换:
import pandas as pd # 示例数据构造,你可以替换成自己的df df = pd.DataFrame({ 'id': [1,2,3,4], 'values': [['a','b','c'], ['a','c'], ['b','c'], ['d']] }) # 核心转换逻辑 result = pd.concat([df['id'], df['values'].str.join('|').str.get_dummies()], axis=1)
方案2:使用explode+crosstab(逻辑直观,无分隔符冲突问题)
如果列表元素可能包含特殊字符,担心分隔符冲突,可以用拆分再聚合的方式实现:
# 先将列表拆分为单行单个元素的结构 df_exploded = df.explode('values') # 用交叉表统计每个id对应元素的出现次数,自动生成0/1矩阵 result = pd.crosstab(df_exploded['id'], df_exploded['values']).reset_index() # 清除自动生成的列名索引,输出格式更符合要求 result.columns.name = None
两种方案输出的result都和你需要的目标格式完全一致。
内容的提问来源于stack exchange,提问作者Sahil Gupta
相关产品推荐
相关产品推荐

