免责声明:这是我的第一个问题,有点尴尬:/
我有两个列的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
我想聚集具有相同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