Python 根据组的计数值按数据帧对分组进行排序
通过应用以下2个查询,我对dataframe组中的值进行了分组和排序: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_
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