Pandas에서 열을 한 열로 모으고 다른 열로 정렬할 수 있는 방법이 있을까요?

Asked 5 months ago, Updated 5 months ago, 61 views

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

2022-06-21 19:37

1 Answers

이렇게 해보세요

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


2022-06-21 19:38

If you have any answers or tips


© 2022 pinfo. All rights reserved.