我有一个像这样的熊猫数据框:
我的数据框如下图所示,
Input DataFrame
id ratio
0 1 5.00%
1 2 9.00%
2 3 6.00%
3 2 13.00%
4 1 19.00%
5 4 30.00%
6 3 5.5%
7 2 22.00%
然后如何将其分组
id ratio
0 1 5.00%
4 1 19.00%
6 3 5.5%
2 3 6.00%
1 2 9.00%
3 2 13.00%
7 2 22.00%
5 4 30.00%
因此,本质上,首先查看比率,取该值的最小值,然后将其具有相同ID的其余行分组。然后寻找第二低的比率,并再次将其余的ID分组,依此类推。
最佳答案
首先将您的ratio
列转换为数字。
然后,通过使用rank
获得每个组中最低的Groupby
最后,我们基于rank
和numeric ratio
进行排序。
df['ratio_num'] = df['ratio'].str[:-1].astype(float).rank()
df['rank'] = df.groupby('id')['ratio_num'].transform('min')
df = df.sort_values(['rank', 'ratio_num']).drop(columns=['rank', 'ratio_num'])
id ratio
0 1 5.00%
1 1 19.00%
2 3 5.5%
3 3 6.00%
4 2 9.00%
5 2 13.00%
6 2 22.00%
7 4 30.00%
关于python - 基于列值的 Pandas 排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59586752/