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

时间:2021-06-08 13:25:18

标签: python pandas dataframe split

我有一个包含更多产品描述的数据框。

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

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

1 个答案:

答案 0 :(得分:2)

尝试通过 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() 方法:< /p>

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'}))
相关问题