熊猫-分组后在多列上的最高计数项

时间:2018-10-07 04:30:08

标签: python pandas pandas-groupby

我有按两列(X,Y)分组的数据帧数据,然后我在Z中有元素计数。这里的想法是找到X,Y上元素的前2个计数。

数据框应如下所示:

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和美国感兴趣,然后预期输出:

 C     X   Y     Z
USA    NJ  JC    40
USA    NY  BR    14
IND    MAH MUM   4
IND    KAR BLR   2

1 个答案:

答案 0 :(得分:1)

我认为您需要在索引groupby上使用参数sort=False,然后在apply上使用lambda function,在Z上使用sort_values使用参数{{1 }},然后将前2个值和reset_index设为:

ascending=False

编辑::OP更改了数据框后:

mask = df.index.isin(['USA','IND'])
df = df[mask].groupby(df[mask].index,sort=False).\
              apply(lambda x: x.sort_values('Z',ascending=False)[:2]).\
              reset_index(level=0,drop=True)
print(df)

       X    Y   Z
USA   NJ   JC  40
USA   NY   BR  14
IND  MAH  MUM   4
IND  KAR  BLR   2