python - 根据列排列/排序熊猫数据框数据中的数据
问题描述
我是熊猫新手。我需要根据组内的循环顺序按降序对数据值进行排序和分组。我有以下数据框:
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)组需要跟随等等。
排序后的最终数据框应如下所示:
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
. 所以需要相应地制定逻辑。
我可以通过以下步骤解决问题:
- 根据
Col1
. - 根据中的值对每个子数据帧进行排序和索引
Col2
。 - 然后循环遍历子数据帧的索引并将数据附加到来自每个单独子数据帧的新数据帧中。
这个过程似乎不是最好的方法。所以我正在寻找更简单的原生解决方案的建议。
解决方案
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
推荐阅读
- sql - 通过值是否可以转换为日期来过滤 nvarchar 列?
- ms-access - 将字符串的 Access 字段格式化为时间
- android - Flutter:如何在Java文件中使用“Dart语言”定义的类文件?
- android - Nativescript 库对于 Android 来说太大了
- ruby-on-rails - 如何在 Rails 6 中使用多个根路由?
- r - 选择组中的最后一个非同期日期
- php - PHP 数组到 CSV 下载 - 第一列标题中的不需要的数据
- javascript - Madcap Flare 11 - HTML5 输出引发 requirejs 错误 - 不匹配的匿名定义()模块:函数(C
- java - Spring Boot 应用程序使用的 Dockerfile 在哪里?
- azure-cosmosdb - 在 Cosmos DB 中的数字序列中查找最小缺失值