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

Pandas如何将列表类型列转换为对应值的二进制存在标识列

问题背景

初始数据集构造代码如下:

import pandas as pd
#Create Series
s = pd.Series([[1,2,3,],[1,10,11],[2,11,12]],['buz','bas','bur'])
k = pd.Series(['y','n','o'],['buz','bas','bur'])
#Create DataFrame df from two series
df = pd.DataFrame({'first':s,'second':k})

已经完成的操作:基于first列的所有唯一值提前创建了初始值为0的新列,实现代码如下:

def text_to_list(df,col):
    val=df[col].explode().unique()
    return val
unique=text_to_list(df,'first')
for options in unique :
    df[options]=0

当前需求:给新创建的数值列赋值,若列名对应的数值存在于该行first列的列表中,对应位置赋值为1,否则保留0。预期最终输出如下:

first   second  1  2  3  10  11  12
buz     [1, 2, 3]      y  1  1  1   0   0   0
bas    [1, 10, 11]     n  1  0  0   1   1   0
bur    [2, 11, 12]     o  0  1  0   0   1   1
实现方案

方案1:基于已有建列逻辑补充赋值

在现有代码的基础上,新增遍历判断逻辑即可完成赋值:

for col in unique:
    df[col] = df['first'].apply(lambda x: 1 if col in x else 0)

方案2:更简洁的无前置建列方案

该方案无需提前调用explode创建新列,一行代码即可完成所有操作:

df1=df.join(pd.get_dummies(df['first'].apply(pd.Series).stack()).sum(level=0))
print(df1)

逻辑说明:先将first列的列表元素拆分为单独的行,通过get_dummies生成独热编码,再按原始索引聚合求和,最后和原DataFrame拼接,直接得到符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:15:01