我有一个熊猫数据框,如:
我的数据框如下图所示,
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分组,等等。
答案 0 :(得分:2)
首先将您的T
列转换为数字。
然后,通过使用S
ratio
最后,我们基于rank
和Groupby
进行排序。
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%