猿问

如何转换数据框,以使列值成为行值

我有以下数据框,如下所示:


df = pd.DataFrame({'fruit': ['berries','berries', 'berries', 'tropical', 

'tropical','tropical','berries','nuts'], 

           'code': [100,100,100,200,200, 300,400,500],

           'subcode': ['100A', '100B', '100C','200A', '200B','300A', 

           '400A', '500A']})



    code    fruit   subcode

  0 100     berries 100A

  1 100     berries 100B

  2 100     berries 100C

  3 200     tropica 200A

  4 200     tropical 200B

  5 300     tropical 300A

  6 400     berries 400A

  7 500     nuts    500A

我想将数据框转换为以下格式:


    code    fruit   subcode1 subcode1 subcode1

  0 100     berries 100A      100B   100C

  3 200     tropica 200A      200B

  5 300     tropical 300A

  6 400     berries 400A

  7 500     nuts    500A 

不幸的是,我对如何进行感到困惑。我咨询过Unmelt Pandas DataFrame之类的帖子,并介绍了堆栈和非堆栈的组合。我怀疑也涉及到一些串联。我们将不胜感激任何建议,以帮助我指出正确的方向!


侃侃无极
浏览 151回答 2
2回答

阿晨1998

您可以使用groupby,取值并将其转换为序列。df.groupby(['code','fruit'])['subcode'].apply(         lambda x: x.values      ).apply(pd.Series)       .add_prefix('subcode_')                subcode_0 subcode_1 subcode_2code fruit                                 100  berries       100A      100B      100C200  tropical      200A      200B       NaN300  tropical      300A       NaN       NaN400  berries       400A       NaN       NaN500  nuts          500A       NaN       NaN

饮歌长啸

set_index和unstack和一起玩一点,您会得到的。(df.set_index(['code', 'fruit'])   .set_index(df.subcode.str.extract('([a-zA-Z]+)', expand=False), append=True)   .subcode   .unstack()   .fillna('')                  # these last three    .reset_index()               # operations are     .rename_axis(None, axis=1)   # not important)   code     fruit     A     B     C0   100   berries  100A  100B  100C1   200  tropical  200A  200B      2   300  tropical  300A            3   400   berries  400A            4   500      nuts  500A        
随时随地看视频慕课网APP

相关分类

Python
我要回答