我有一个像这样的熊猫数据框:

我的数据框如下图所示,

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

最后,我们基于ranknumeric 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/

10-13 23:56