Python 熊猫——以不同的顺序排列在一起
我有一个数据集,我想按组变量排序。对于A组,我想按升序排列;对于B组,我想按降序排列。我只知道如何按一个顺序对组进行排序,如下面的代码。是否有一种方法可以在组内按不同顺序对组进行排序 以下是示例数据: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
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)