在Pandas中是否有一些方法可以按一列聚合行并按另一列排序?



免责声明:这是我的第一个问题,有点尴尬:/

我有两个列的DataFrame:titleval:

>>> 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

我想聚集具有相同title的集群中的行,然后通过它们拥有的最大val降序对该集群进行排序。如果最大val等于,则按title按字母顺序排序。集群中的行必须按val降序排序。

我知道,我可以做很长的路,像:

>>> 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

但是那里会有捷径吗?

有多列排序,所以创建的辅助列new用于排序:

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

最新更新