如何将数据帧列拆分为行值?

2024-09-29 23:25:23 发布

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

我有一个带有更多产品描述的数据框架

data = {'product': ['1234', '5678'],
        'descriptionOLD': ['old1234', 'old5678'],
        'descriptionNEW': ['new1234', 'new5678'],
        'descriptionFUTURE': ['future1234', 'future5678'],
        }

如何以这种格式拆分此数据帧

product type            description
1234    descriptionOLD  old1234
1234    descriptionOLD  old5678
1234    descriptionNEW  new1234
1234    descriptionNEW  new5678
1234    descriptionFUTURE future1234
1234    descriptionFUTURE future5678
...

到目前为止,我已经尝试:

df=pd.DataFrame(data)
df['type']=''
df['description']=''
for id, row in df.iterrows():
    df['type'][id]='descriptionOLD'
    df['description'][id]=row['descriptionOLD']

df.pop('descriptionOLD')
df.pop('descriptionNEW')
df.pop('descriptionFUTURE')

我得到了这个结果:

  product            type description
0    1234  descriptionOLD     old1234
1    5678  descriptionOLD     old5678

但我不知道如何处理新的和未来的描述,以实现所需的数据帧


Tags: 数据iddfdatatypedescriptionproductpop
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:23

尝试通过filter()方法筛选列,通过join()方法获取“产品”列,最后通过melt()方法:

out=(df.filter(like='description')
   .join(df['product'])
    .melt(id_vars='product',var_name='type',value_name='description'))

尝试通过filter()方法过滤出列,通过set_index()方法保留“产品”,通过reset_index()方法使产品返回列,最后通过melt()方法:

out=(df.set_index('product')
       .filter(like='description')
       .reset_index()
       .melt(id_vars='product',var_name='type',value_name='description'))

根据@NK03的建议,您还可以使用filter()stack()的组合:

out=(df.set_index('product')
       .filter(like='description')
        .stack()
        .reset_index(name ='description')
        .rename(columns = {'level_1' : 'type'}))

相关问题 更多 >

    热门问题