DataFrame에는 title과 val이라는 두 개의 열이 있습니다.
>>> df=pd.DataFrame(
... {
... "title": ["a", "a", "a", "b", "b", "b", "c", "c", "c"],
... "val": [1, 4, 3, 4, 5, 6, 2, 4, 5],
... }
... )
>>> df
title val
0 a 1
1 a 4
2 a 3
3 b 4
4 b 5
5 b 6
6 c 2
7 c 4
8 c 5
동일한 제목의 클러스터에 행을 집계한 다음 최대값의 내림차순으로 해당 클러스터를 정렬하려고 합니다.
최대값이 같으면 알파벳 순으로 제목별로 군집을 정렬합니다.
군집의 행은 내림차순으로 정렬되어야 합니다.
물론 이렇게 가능하다는 건 압니다.
>>> df.loc[:,'max_value']=df.groupby('title', as_index=False).transform(max)
>>> df
title val max_value
0 a 1 4
1 a 4 4
2 a 3 4
3 b 4 6
4 b 5 6
5 b 6 6
6 c 2 5
7 c 4 5
8 c 5 5
>>> df.sort_values(['max_value','title', 'val'], ascending=False, inplace=True)
>>> df.drop(columns='max_value', inplace=True)
>>> df
title val
5 b 6
4 b 5
3 b 4
8 c 5
7 c 4
6 c 2
1 a 4
2 a 3
0 a 1
그치만 좀 짧게 할 수 있는 방법 없을까요?
python pandas
이렇게 해보세요
df = df.loc[df.assign(a = df.groupby('title', as_index=False).transform(max))
.sort_values(['a','title', 'val'], ascending=False).index]
print (df)
title val
5 b 6
4 b 5
3 b 4
8 c 5
7 c 4
6 c 2
1 a 4
2 a 3
0 a 1
© 2023 OneMinuteCode. All rights reserved.