我是熊猫新手。我需要根据组内的循环顺序以降序对数据值进行排序和分组。我有以下数据框:
Col1 Col2
A 5030
B 4250
c 3340
D 2100
A 5044
B 4790
C 3482
C 3233
A 5099
B 4820
D 2345
D 2784
A 5999
我需要对数据帧进行排序,以使Col2
中的所有值在Col1
内以从高到低的循环顺序排列。例如,将首先对(A,B,C,D)的所有最高值进行排序,然后再对(A,B,C,D)的第二高值进行排序,然后再对(A,B,C,D)的第三高值进行排序B,C,D)组需要关注,依此类推。
排序后的最终数据框应如下所示:
Col1 Col2
A 5999
B 4820
C 3482
D 2784
A 5099
B 4790
C 3340
D 2345
A 5044
B 4250
C 3233
D 2100
A 5030
Col1
除(A,B,C,D)之外将没有其他任何值。但是在某些情况下,Col1
中仅存在2或3个不同的值。因此,需要相应地制定逻辑。
我可以通过以下步骤解决问题:
Col1
中的不同值创建单独的数据框。Col2
中的值以降序对每个子数据帧进行排序和索引。此过程似乎不是最佳方法。因此,我正在寻找有关更简单的本机解决方案的建议。
答案 0 :(得分:3)
IIUC使用cumcount
df['Key']=df.sort_values('Col2',ascending=False).groupby('Col1').cumcount()
df=df.sort_values(['Key','Col1']).drop('Key',1)
df
Out[453]:
Col1 Col2
12 A 5999
9 B 4820
6 C 3482
11 D 2784
8 A 5099
5 B 4790
2 C 3340
10 D 2345
4 A 5044
1 B 4250
7 C 3233
3 D 2100
0 A 5030