我有按两列(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
答案 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