使用pandas将字符串列表转换为虚拟变量

2024-05-13 23:51:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有以下熊猫DataFrame

pd.DataFrame(columns=['name', 'tags'], data=[
    ['Rob', ['a', 'c']],
    ['Erica', ['b', 'c']]
])

表格:

^{pr2}$

如何将其转换为:

Name   tags_a  tags_b  tags_c
Rob    1       0       1
Erica  0       1       1

如果每一行只能有一个标记,我可以用pd.get_dummies(df, columns=['tags'])来做,但是当tagsList时,这就不起作用了。在


Tags: columnsname标记dataframedfdatagettags
3条回答
#use apply to transform tags to separate tags
df.apply(lambda x: [x['name']] + np.in1d(('a','b','c'),x.tags).astype(int).tolist() ,axis=1).apply(pd.Series)

#rename columns
df2.columns=['name', 'tags_a', 'tags_b', 'tags_c']

df2
Out[505]: 
    name  tags_a  tags_b  tags_c
0    Rob       1       0       1
1  Erica       0       1       1
# reorganize data
df = pd.get_dummies(df.set_index('name').tags
                      .apply(pd.Series)
                      .stack()
                   ).unstack()

# remove multilevel column and collapse counts per name
df.columns = df.columns.droplevel(1)
df.groupby(by=df.columns, axis=1).sum().add_prefix('tags_')

       tags_a  tags_b  tags_c
name                         
Rob         1       0       1
Erica       0       1       1

str.get_dummies

df.tags.str.join('|').str.get_dummies().add_prefix('tags_')

   tags_a  tags_b  tags_c
0       1       0       1
1       0       1       1

包括join

^{pr2}$

相关问题 更多 >