Python pandas-多列上groupby之后的最高计数项目

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

我将数据帧数据按两列(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    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