如何为熊猫列中的每个逗号分隔值创建新行


问题内容

我有一个这样的数据框:

text                   category 
sfsd sgvv              abc,xyz
zydf sefs sdfsd        yyy
dfsd dsrgd dggr        xyz
eter vxg wfe           abc
dfvf ertet             abc,xyz

我想要这样的输出:

text                   category 
sfsd sgvv              abc
sfsd sgvv              xyz
zydf sefs sdfsd        yyy
dfsd dsrgd dggr        xyz
eter vxg wfe           abc
dfvf ertet             abc
dfvf ertet             abc

基本上为列中的每个两个或更多类别创建一个新行category


问题答案:

DataFrame.explode(pandas
0.25+)与Series.str.split

df1 = (df.assign(category = df['category'].str.split(','))
         .explode('category')
         .reset_index(drop=True))

对于较早的熊猫版本,首先DataFrame.set_index不用于分隔符列,然后Series.str.split通过进行重塑DataFrame.stack,最后DataFrame.reset_index-首先删除的第二级,MultiIndex然后将索引转换为列:

df1 = (df.set_index('text')['category']
         .str.split(',', expand=True)
         .stack()
         .reset_index(level=1, drop=True)
         .reset_index(name='category'))
print (df1)
              text category
0        sfsd sgvv      abc
1        sfsd sgvv      xyz
2  zydf sefs sdfsd      yyy
3  dfsd dsrgd dggr      xyz
4     eter vxg wfe      abc
5       dfvf ertet      abc
6       dfvf ertet      xyz