Python 有条件地对数据帧排序

Python 有条件地对数据帧排序,python,pandas,dataframe,sorting,Python,Pandas,Dataframe,Sorting,我不确定这个问题的最佳标题 例如,我有以下数据帧(这里按标题排序): 我想按专辑艺术家排序,然后按专辑按年份分组,然后按曲目 因此,需要明确的是,在两行之间,Year只有在Album相同时才具有优先权 输出应该是 AlbumArtist Album Track Title Year 4 BABYMETAL METAL RESISTANCE 1 Road o

我不确定这个问题的最佳标题

例如,我有以下数据帧(这里按
标题排序)

我想按
专辑艺术家
排序,然后按
专辑
年份
分组,然后按
曲目
因此,需要明确的是,在两行之间,
Year
只有在
Album
相同时才具有优先权

输出应该是

         AlbumArtist              Album  Track                       Title  Year
4          BABYMETAL   METAL RESISTANCE      1          Road of Resistance  2016
3          BABYMETAL   METAL RESISTANCE      2                      Karate  2016
2          BABYMETAL       METAL GALAXY      1                FUTURE METAL  2019
0          BABYMETAL       METAL GALAXY      2                 DA DA DANCE  2019
6  Bandai..Sora Ltd.  Super Smash Bros.      1  The Legend of Zelda Medley  2015
5  Bandai..Sora Ltd.  Super Smash Bros.      2                Temple Theme  2001
1  Bandai..Sora Ltd.  Super Smash Bros.      3              Death Mountain  2018
我尝试过使用排序键,
multi-index
groupby()
rank()
。。。但我不太明白怎么做

我可以通过使用带有
\uu lt\uu
和排序函数(如下)的类来近似实现我想要的功能,但我怀疑在更大量的数据上,这样做的效率会低于
pandas

class Song():
def u u init _;(self、专辑艺术家、专辑、曲目、标题、年份):
self.data={
“唱片艺术家”:唱片艺术家,
“专辑”:专辑,
“轨道”:轨道,
“头衔”:头衔,
“年”:年,
}
定义(自身、其他):
对于排序器中的字段:
如果self.data[字段[0]]!=其他.数据[字段[0]]:
如果len(字段)>1:#需要二次排序
返回self.data[字段[1]]<(其他.data[字段[1]])
其他:#常规排序
返回self.data[字段[0]]<(其他.data[字段[0]])
定义(自我):
返回str(列表(self.data.values())
排序器=[
(“唱片艺术家”),
(“专辑”、“年份”),
(轨道),,
]
行=[
歌曲(“BABYMETAL”,“金属银河”,2,“DA DA DANCE”,2019年),
宋(“班代……索拉有限公司”,“超级粉碎兄弟”,3,“死亡之山”,2018年),
歌曲(“BABYMETAL”,“金属银河”,1,“未来金属”,2019年),
歌曲(“BABYMETAL”,“金属电阻”,2,“空手道”,2016年),
Song(“BABYMETAL”,“金属电阻”,1,“电阻之路”,2016年),
歌曲(“班代……索拉有限公司”,“超级粉碎兄弟”,2,“庙宇主题”,2001年),
歌曲(“班代……索拉有限公司”,“超级粉碎兄弟”,1,“塞尔达混合泳传奇”,2015年),
]
对于已排序的项目(行):
打印(项目)
熊猫的方法是什么

         AlbumArtist              Album  Track                       Title  Year
4          BABYMETAL   METAL RESISTANCE      1          Road of Resistance  2016
3          BABYMETAL   METAL RESISTANCE      2                      Karate  2016
2          BABYMETAL       METAL GALAXY      1                FUTURE METAL  2019
0          BABYMETAL       METAL GALAXY      2                 DA DA DANCE  2019
6  Bandai..Sora Ltd.  Super Smash Bros.      1  The Legend of Zelda Medley  2015
5  Bandai..Sora Ltd.  Super Smash Bros.      2                Temple Theme  2001
1  Bandai..Sora Ltd.  Super Smash Bros.      3              Death Mountain  2018