Python 熊猫——以不同的顺序排列在一起

Python 熊猫——以不同的顺序排列在一起,python,pandas,Python,Pandas,我有一个数据集,我想按组变量排序。对于A组,我想按升序排列;对于B组,我想按降序排列。我只知道如何按一个顺序对组进行排序,如下面的代码。是否有一种方法可以在组内按不同顺序对组进行排序 以下是示例数据: Group Student Score A Jamie 1 A Jack 2 A James 3 B Jamie 1 B Jack 2 B James 3 这是理想的结果 Group St

我有一个数据集,我想按组变量排序。对于A组,我想按升序排列;对于B组,我想按降序排列。我只知道如何按一个顺序对组进行排序,如下面的代码。是否有一种方法可以在组内按不同顺序对组进行排序

以下是示例数据:

Group   Student Score
A      Jamie    1
A       Jack    2
A      James    3
B      Jamie    1
B       Jack    2
B      James    3
这是理想的结果

 Group  Student Score   rank
   A    Jamie   1   1
   A    Jack    2   2
   A    James   3   3
   B    Jamie   1   3
   B    Jack    2   2
   B    James   3   1
这就是我所尝试的:

df['rank'] = df.groupby('Group')['Score'].rank(ascending=True)

我能想到的最简单的方法是定义一个自定义列表,定义每个组的顺序,并使用列表理解迭代
rank\u升序
,应用相同的逻辑:

rank_ascending = [True, False]
df['rank'] = pd.concat([g.Score.rank(ascending=asc) for asc, (_,g) in 
                        zip(rank_ascending, df.groupby('Group'))], 0)


更新-要获得更易于阅读的版本:

order = [True, False]
ranked_groups = []
for asc, (_,g) in zip(order, df.groupby('Group')):
    ranked_groups.append(g.Score.rank(ascending=asc))

df['rank'] = pd.concat(ranked_groups, axis=0)

谢谢你的回复。你能把代码再解包一点吗?此外,我还收到一个错误“没有要连接的对象”。当然,如果更新在@warrior运行,请告诉我。您必须确保在
列中有与组一样多的
顺序
order = [True, False]
ranked_groups = []
for asc, (_,g) in zip(order, df.groupby('Group')):
    ranked_groups.append(g.Score.rank(ascending=asc))

df['rank'] = pd.concat(ranked_groups, axis=0)