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'
为列指定名称。当然,但我没有看到排序部分,如何确保按升序/降序排序?