首页 > 解决方案 > 根据列排列/排序熊猫数据框数据中的数据

问题描述

我是熊猫新手。我需要根据组内的循环顺序按降序对数据值进行排序和分组。我有以下数据框:

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

我需要对数据帧进行排序,以便其中的所有值按照从高到低的循环顺序排列Col2Col1例如,(A,B,C,D)的所有最高值将首先排序,然后(A,B,C,D)的第二高值需要跟随,然后是(A, 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. 所以需要相应地制定逻辑。

我可以通过以下步骤解决问题:

  1. 根据Col1.
  2. 根据中的值对每个子数据帧进行排序和索引Col2
  3. 然后循环遍历子数据帧的索引并将数据附加到来自每个单独子数据帧的新数据帧中。

这个过程似乎不是最好的方法。所以我正在寻找更简单的原生解决方案的建议。

标签: pythonpandaspython-2.7numpy

解决方案


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

推荐阅读