Python 3.x 如何按多列对数据帧进行分组,按降序对总计进行求和和和排序?

Python 3.x 如何按多列对数据帧进行分组,按降序对总计进行求和和和排序?,python-3.x,pandas,dataframe,group-by,Python 3.x,Pandas,Dataframe,Group By,给定以下数据帧: user_id col1 col2 1 A 4 1 A 22 1 A 112 1 B -0.22222 1 B 9 1 C 0 2 A -1 2 A -5 2 K NA 我想按用户id和col1进行分组并计数。然后按降序对组内的计数进行排序 以下是我试图做的,但我没有得到正确的输出: df[["user_i

给定以下数据帧:

user_id col1 col2
1       A    4
1       A    22
1       A    112
1       B    -0.22222
1       B    9
1       C    0
2       A    -1
2       A    -5
2       K    NA
我想按用户id和col1进行分组并计数。然后按降序对组内的计数进行排序

以下是我试图做的,但我没有得到正确的输出:

df[["user_id", "col1"]]. \
groupby(["user_id", "col1"]). \
agg(counts=("col1","count")). \
reset_index(). \
sort_values(["user_id", "col1", "counts"], ascending=False)
请告知我应该更改什么以使其正常工作

预期产出:

user_id col1  counts
1       A     3
        B     2
        C     1
2       A     2
        K     1

使用
GroupBy.size

In [199]: df.groupby(['user_id', 'col1']).size()
Out[199]: 
user_id  col1
1        A       3
         B       2
         C       1
2        A       2
         K       1
或:

In [201]: df.groupby(['user_id', 'col1']).size().reset_index(name='counts')
Out[201]: 
   user_id col1  counts
0        1    A       3
1        1    B       2
2        1    C       1
3        2    A       2
4        2    K       1
In [206]: df.groupby(['user_id', 'col1']).agg({'col2': 'size'})
Out[206]: 
              col2
user_id col1      
1       A        3
        B        2
        C        1
2       A        2
        K        1
编辑:

In [201]: df.groupby(['user_id', 'col1']).size().reset_index(name='counts')
Out[201]: 
   user_id col1  counts
0        1    A       3
1        1    B       2
2        1    C       1
3        2    A       2
4        2    K       1
In [206]: df.groupby(['user_id', 'col1']).agg({'col2': 'size'})
Out[206]: 
              col2
user_id col1      
1       A        3
        B        2
        C        1
2       A        2
        K        1
编辑-2:要进行排序,请使用:

In [213]: df.groupby(['user_id', 'col1'])['col2'].size().sort_values(ascending=False)
Out[213]: 
user_id  col1
1        A       3
2        A       2
1        B       2
2        K       1
1        C       1
Name: col2, dtype: int64

使用Mayank的主要思想回答:

df.groupby(["id_user","col1"]).size().reset_index(name="counts").sort_values(["id_user", "col1"], ascending=False)

解决了我的问题。

请发布您的预期输出。@MayankPorwal已完成并进行了编辑,以使其更清晰,但是否包含多个列?我该怎么办?一般方法是什么。我知道大小。@SteveS请检查我答案中更新的
EDIT
部分。非常感谢,只是为了澄清
reset\u index(name='counts')
做什么?分组时,它会将分组列放入索引中。因此
reset\u index
将索引创建为列,并
name='counts'
为列指定名称。当然,但我没有看到排序部分,如何确保按升序/降序排序?