基于列值的熊猫排序

时间:2020-01-04 00:03:16

标签: python pandas rows

我有一个熊猫数据框,如:

我的数据框如下图所示,

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分组,等等。

2 个答案:

答案 0 :(得分:2)

首先将您的T列转换为数字。

然后,通过使用S

,每组获得最低的ratio

最后,我们基于rankGroupby进行排序。

rank

答案 1 :(得分:0)

借助pd.Categorical

d = {'id':[1, 2, 3, 2, 1, 4, 3, 2],
     'ratio': ['5.00%', '9.00%', '6.00%', '13.00%', '19.00%', '30.00%', '5.5%', '22.00%']}

df = pd.DataFrame(d)

df['ratio_'] = df['ratio'].map(lambda x: float(x[:-1]))
df['id'] = pd.Categorical(df['id'], categories=df.sort_values(['id', 'ratio_']).groupby('id').head(1).sort_values(['ratio_', 'id'])['id'], ordered=True)
print(df.sort_values(['id', 'ratio_']).drop('ratio_', axis=1))

打印:

  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%