Python pandas-多列上groupby之后的最高计数项目
我将数据帧数据按两列(X,Y)分组,然后计算Z中的元素数。这里的想法是找到X,Y中的前2个元素数 Dataframe应该如下所示:Python pandas-多列上groupby之后的最高计数项目,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我将数据帧数据按两列(X,Y)分组,然后计算Z中的元素数。这里的想法是找到X,Y中的前2个元素数 Dataframe应该如下所示: mostCountYInX = df.groupby(['X','Y'],as_index=False).count() C X Y Z USA NY NY 5 USA NY BR 14 USA NJ JC 40 USA FL MI 3 IND MAH MUM 4 IND
mostCountYInX = df.groupby(['X','Y'],as_index=False).count()
C X Y Z
USA NY NY 5
USA NY BR 14
USA NJ JC 40
USA FL MI 3
IND MAH MUM 4
IND KAR BLR 2
IND KER TVM 2
CHN HK HK 3
CHN SH SH 3
我可以单独提取我要查找的信息:
XTopCountInTopY = mostCountYInX[mostCountYInX['X'] == 'NY']
XTopCountInTopY = XTopCountInTopY.nlargest(2,'Y')
在上面我知道我要找的组是X=NY,并获得了前2名的记录。有没有办法把它们打印在一起
假设我对IND和USA感兴趣,那么预期输出:
C X Y Z
USA NJ JC 40
USA NY BR 14
IND MAH MUM 4
IND KAR BLR 2
我认为您需要在索引上使用参数sort=False
,然后使用lambda函数应用,并在Z
上使用参数升序=False
,然后取前2个值,如下所示:
编辑:OP更改数据帧后:
mask = df['C'].isin(['USA','IND'])
df = df[mask].groupby('C',sort=False).\
apply(lambda x: x.sort_values('Z',ascending=False)[:2]).\
reset_index(drop=True)
print(df)
C X Y Z
0 USA NJ JC 40
1 USA NY BR 14
2 IND MAH MUM 4
3 IND KAR BLR 2
对不起,我错过了USA和IND不是索引COL。如果我们需要为每个结果组聚合计数,我们如何做。我认为这是缺失的。我得到的是Z的实际值,而不是分组后的记录数。
mask = df['C'].isin(['USA','IND'])
df = df[mask].groupby('C',sort=False).\
apply(lambda x: x.sort_values('Z',ascending=False)[:2]).\
reset_index(drop=True)
print(df)
C X Y Z
0 USA NJ JC 40
1 USA NY BR 14
2 IND MAH MUM 4
3 IND KAR BLR 2