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

2024-09-29 23:19:13 发布

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

我有这样一个数据帧:

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列中为每两个或更多类别创建一个新行


Tags: textabccategoryyyyxyzsdfsdsfsddggr
3条回答

^{}(0.25+)与^{}一起使用:

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

对于旧版本,首先^{}用于非分隔列,然后^{}并通过^{}重塑,最后^{}-首先用于删除第二级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

链接到this question,请为您的数据帧尝试以下代码:

We can first split the column, expand it, stack it and then join it back to the original df like below:

df.drop('category', axis=1).join(
  df['category'].str.split(',', expand=True).stack().reset_index(level=1,drop=True).rename('category'))

对于更旧的版本,请尝试使用set_index+stack+str.split+unstack+reset_index

print(df.set_index('text')
      .stack()
      .str.split(', ', expand=True)
      .stack()
      .unstack(-2)
      .reset_index(-1, drop=True)
      .reset_index())

相关问题 更多 >

    热门问题