Python Pandas GroupBy:如何基于列获取前n个值

Python Pandas GroupBy:如何基于列获取前n个值,python,pandas,count,group-by,dataframe,Python,Pandas,Count,Group By,Dataframe,如果这是一个基本问题,请原谅我,但我对熊猫还不熟悉。我有一个带有列a的dataframe,我希望根据列a中的计数获得前n行 A B C x 12 ere x 34 bfhg z 6 bgn z 8 rty y 567 hmmu,,u x 545 fghfgj x 44 zxcbv 请注意,这只是我实际使用的数据的一个小样本 如果我们看A列,值x出现4次,y出现2次,z出现1次。如何根据此计数获取列A的前n个值 print df.groupby(['A']).sum() 这给

如果这是一个基本问题,请原谅我,但我对熊猫还不熟悉。我有一个带有列a的dataframe,我希望根据列a中的计数获得前n行

A  B  C
x 12  ere
x 34  bfhg
z 6   bgn
z 8   rty
y 567 hmmu,,u
x 545 fghfgj
x 44  zxcbv
请注意,这只是我实际使用的数据的一个小样本

如果我们看A列,值x出现4次,y出现2次,z出现1次。如何根据此计数获取列A的前n个值

print df.groupby(['A']).sum()
这给了我

A      B

x      6792117
但当我这么做的时候

print len(df.groupby(['A']).get_group('x'))
我明白了

21
此外

len(df.index) 
给我

23657
那么,在group by的结果中,
'A'=='x'
的计数怎么可能是
6792117
?我错过了什么

更新

考虑

print df.groupby(['A']).describe()
给我

A      B

x      6792117
     Tags           DocID

x    count      21.000000
     mean   323434.142857
     std     35677.410292
     min    266631.000000
     25%    292054.000000
     50%    325575.000000
     75%    347450.000000
     max    380286.000000
      A       B      C
1664  g       151    151
1887  k       85     85
1533  q       72     72
53    y       68     68
1793  t       62     62
151
这是有道理的。我只想得到A列中具有最大计数的行

更新2

是的

print df.groupby(['A'],as_index=False).count()
我明白了

基本上,对于A列,标签x在B列中有21个条目,在C列中有21个条目。在我的例子中,B列和C列是唯一的。这很好。现在我如何得到关于C列的前n行

更新3

所以我试过了

import heapq
print heapq.nlargest(3,df.groupby(['A'],as_index=False).count()['C'])
我得到

[151, 85, 72]

所以我知道,对于A列,我将上面的计数作为前3个计数。但我仍然不知道这些计数指的是A列的哪个值?例如,A列中的哪个值的计数为151?有什么方法可以链接这些信息吗?

我尝试过的一种方法

import heapq

dcf =  df.groupby(['A'],as_index=False).count()
print dcf.loc[dcf['C'].isin(heapq.nlargest(5,dcf['C']))].sort(['C'],ascending=False)
给我

A      B

x      6792117
     Tags           DocID

x    count      21.000000
     mean   323434.142857
     std     35677.410292
     min    266631.000000
     25%    292054.000000
     50%    325575.000000
     75%    347450.000000
     max    380286.000000
      A       B      C
1664  g       151    151
1887  k       85     85
1533  q       72     72
53    y       68     68
1793  t       62     62
151
证实

print len(df.loc[df["A"]=="g"])
给我

A      B

x      6792117
     Tags           DocID

x    count      21.000000
     mean   323434.142857
     std     35677.410292
     min    266631.000000
     25%    292054.000000
     50%    325575.000000
     75%    347450.000000
     max    380286.000000
      A       B      C
1664  g       151    151
1887  k       85     85
1533  q       72     72
53    y       68     68
1793  t       62     62
151
所以我得到了期望的结果,因为我可以根据A列的计数看到前5个值。但肯定有更好的方法来实现这一点吗?

IIUC您可以使用函数

我尝试您的示例数据,并按列
C
获得前2行:

print df
   A    B        C
0  x   12      ere
1  x   34     bfhg
2  z    6      bgn
3  z    8      rty
4  y  567  hmmu,,u
5  x  545   fghfgj
6  x   44    zxcbv

dcf = df.groupby(['A'],as_index=False).count()
print dcf
   A  B  C
0  x  4  4
1  y  1  1
2  z  2  2

#get 2 largest rows by column C
print dcf.nlargest(2,'C')
   A  B  C
0  x  4  4
2  z  2  2

请发布原始输入数据、代码以再现您的df,目前这一切都是推测性的,没有数据和代码来再现您的观察结果。我认为向下投票是因为您不使用您的样本数据。您可以将使用哪种方法的数据共享到dropbox或google docs?因为我尝试使用您的示例数据,但我的输出与您的不同。不幸的是,数据是专有的。顺便问一下,你试过什么?你能把它作为答案贴出来吗?不,没问题。您可以尝试使用您的示例并通过此输入更改输出。最好是发布推荐的输出(来自示例数据)。