排序Pandas分组项目与最高计数整体

frebpwbc  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(138)

假设我有以下 Dataframe :

d = {'col1': ["8","8","8","8","8","2","2","2","2","3","3"], 'col2': ['a', 'b','b','b','b','a','b','a','a','a','b'],
     'col3': ['m', 'n','z','b','a','ac','b1','ad','a1','a','b1'],'col4': ['m', 'n','z','b1','a','ac1','b31','a1d','3a1','a3','b1']}
test = pd.DataFrame(data=d)

为了对每个包含count的分组项进行排序,我可以执行以下操作:

test.groupby(["col1",'col2'])['col4'].count().reset_index(name="count").sort_values(["col1","count"],ascending=[True,False]).

它返回此表:

但是,我希望col1中包含8的组是第一个条目,因为这个特定的组具有最高的计数(即4)。
我如何实现这一目标?
编辑:这是预期输出:

col1    col2    count
8       b        4
8       a        1
2       a        3
2       b        1
3       a        1
3       b        1
2sbarzqh

2sbarzqh1#

预期的输出不清楚,但假设您希望按计数的降序对每个组中的行进行排序,并按最大(或总计)计数的降序对组进行排序。

(test.groupby(["col1",'col2'])['col4'].count()
     .reset_index(name="count")
     # using the max count per group, for the total use transform('sum')
     .assign(maxcount=lambda d: d.groupby('col1')['count'].transform('max'))
     .sort_values(['maxcount', 'count'], ascending=False)
     .drop(columns='maxcount')
)

输出:

col1 col2  count
5    8    b      4
4    8    a      1
0    2    a      3
1    2    b      1
2    3    a      1
3    3    b      1
goqiplq2

goqiplq22#

在这种情况下,您需要修复您的排序。您的描述有点不清楚,因此是解决您的问题的一般指导方针。
Sort_values从左到右排序,其中第一项定义组的顺序,如果第一项相等,则后面的项定义顺序。
因此,请选择要排序的列的顺序,并正确设置升序参数。

相关问题