Python 根据组的计数值按数据帧对分组进行排序

Python 根据组的计数值按数据帧对分组进行排序,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,通过应用以下2个查询,我对dataframe组中的值进行了分组和排序: df = df.groupby(['table_name','query_param_clean2']).size().to_frame('count').reset_index() df = df.sort_values(['table_name','count'],ascending=False).groupby('table_name').apply(lambda x: x) 数据帧现在看起来像这样: table_

通过应用以下2个查询,我对dataframe组中的值进行了分组和排序:

df = df.groupby(['table_name','query_param_clean2']).size().to_frame('count').reset_index()

df = df.sort_values(['table_name','count'],ascending=False).groupby('table_name').apply(lambda x: x)
数据帧现在看起来像这样:

table_name           query_param_clean2           count
A                       query4                    24
A                       query1                    16
A                       query2                    8
B                       query5                    56
B                       query6                    50
C                       query3                    100
D                       query1                    13
D                       query4                    12
D                       query2                    10
D                       query8                    1
这里,我将dataframe正确地分组,并根据组中的计数进行排序。现在,我想在组之间进行排序

例如:表_name下的C有第一行,最大值为100,因此C应该是输出中的顶部组,在C之后,B应该在那里,因为B的第一行在100之后有第二大值56

输出数据帧应如下所示

我可以在我的第二行代码中添加什么,或者添加其他内容以获得以下形式的数据

table_name           query_param_clean2           count
C                       query3                    100
B                       query5                    56
B                       query6                    50
A                       query4                    24
A                       query1                    16
A                       query2                    8
D                       query1                    13
D                       query4                    12
D                       query2                    10
D                       query8                    1

请提出建议。

我想到的解决方案是首先得到一个表名列表,按最上面记录的最高计数排序。然后按此列表的顺序对您的
df
进行排序

first = df.sort_values(['table_name','count'],ascending=False).groupby('table_name').first()
ordered = first.sort_values(['count'], ascending=False)
orderedNameList = ordered['table_name'].tolist()
df = df.sort_values(['table_name'],ascending=orderedNameList)

我的语法可能不正确,但可能类似的想法也会奏效。

这是一种方法。在这里,我根据每个
表名的最大值显式计算一个
order
列,按此列排序,然后删除它

lst = df.groupby('table_name', as_index=False)['count'].max().\
         sort_values('count', ascending=False)['table_name'].tolist()

df['order'] = df['table_name'].map({j: i for i, j in enumerate(lst)})

df = df.sort_values('order').drop('order', 1)

#   table_name query_param_clean2  count
# 5          C             query3    100
# 3          B             query5     56
# 4          B             query6     50
# 0          A             query4     24
# 1          A             query1     16
# 2          A             query2      8
# 6          D             query1     13
# 7          D             query4     12
# 8          D             query2     10
# 9          D             query8      1