重塑数据帧:Pivot、Stack还是Groupby?

2024-09-28 03:18:25 发布

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

我有这个数据帧:

Playlist    Track Name    Spotify Uri               Playlist Uri
microhouse  make a move   5nUS4bSN0cFZB0knxyM4LZ    1d4gyZxan7lK9KqYU2EJ    
microhouse  mango         2f8eSlsreAHHzJ5SPkpYLf    1d4gyZxan7lK9KqYU2EJ    
attlas      ryat          3McvalY1RDYczyDmixyAwQ    2CInjKguWauO29QB21Co
attlas      further       4qEUN1lON8UjnUiOZc39ID    2CInjKguWauO29QB21Co

我希望它看起来像这样:

Playlist         microhouse                         attlas      
Playlist Uri     1d4gyZxan7lK9KqY                   2CInjKguWauO29Q                      
                 Track Name      Spotify Uri        Track Name   Spotify Uri  
                 make a move     5nUS4bSN0cFZB0kn   ryat         3valY1RDYc
                 mango           2f8eSlsreAHHzJ5S   further      4qEUN1lON

我使用了pivot,它为每个播放列表和该播放列表中的所有曲目名称生成一列,但我不知道如何使用多索引(播放列表和播放列表URI)、无聚合和两个值列(Track Name和Spotify URI)。斯塔克也不是我想要的。谢谢你的帮助。你知道吗


Tags: 数据namemovemaketrackuri播放列表playlist
1条回答
网友
1楼 · 发布于 2024-09-28 03:18:25

您可以使用^{}为新的index^{}^{}的列创建三级多索引,最后一级(如果需要)按^{}排序第二级,按^{}更改级别顺序,以及按^{}更改顺序:

g = df.groupby(['Playlist','Playlist Uri']).cumcount()
df = (df.set_index([g, 'Playlist','Playlist Uri'])
        .unstack([1,2])
        .sort_index(axis=1, level=1)
        .reorder_levels([1,2,0], axis=1)
        .reindex(['Track Name','Spotify Uri'], axis=1, level=2))
print (df)
Playlist                   attlas                          \
Playlist Uri 2CInjKguWauO29QB21Co                           
                       Track Name             Spotify Uri   
0                            ryat  3McvalY1RDYczyDmixyAwQ   
1                         further  4qEUN1lON8UjnUiOZc39ID   

Playlist               microhouse                          
Playlist Uri 1d4gyZxan7lK9KqYU2EJ                          
                       Track Name             Spotify Uri  
0                     make a move  5nUS4bSN0cFZB0knxyM4LZ  
1                           mango  2f8eSlsreAHHzJ5SPkpYLf  

print (df.columns)
MultiIndex(levels=[['attlas', 'microhouse'], 
                   ['1d4gyZxan7lK9KqYU2EJ', '2CInjKguWauO29QB21Co'], 
                   ['Track Name', 'Spotify Uri']],
           labels=[[0, 0, 1, 1], [1, 1, 0, 0], [0, 1, 0, 1]],
           names=['Playlist', 'Playlist Uri', None])

相关问题 更多 >

    热门问题