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
那么,如果在分组结果中看到的'A' == 'x'
的数量是6792117
怎么样?我错过了什么?
更新
考虑
print df.groupby(['A']).describe()
给了我
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列的最大计数行。
UPDATE2
我做了
print df.groupby(['A'],as_index=False).count()
我得到了
A B C
0 x 21 21
1 y 11 11
2 z 8 8
所以基本上,对于A列,标签x在B列中有21个条目,在C列中有21个。在我的情况下,ColumnsB和C是唯一的。这很好。现在我如何得到关于C列的前n行?
UPDATE3
所以我试过
import heapq
print heapq.nlargest(3,df.groupby(['A'],as_index=False).count()['C'])
我得到了
[151, 85, 72]
所以我知道对于A栏,我将上述计数作为前三项计数。但我仍然不知道这些计数指的是A列的哪个值?例如,A列中的哪个值的计数为151?有没有办法链接这些信息?
答案 0 :(得分:4)
IIUC你可以使用函数nlargest
。
我尝试了您的示例数据并按列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
答案 1 :(得分:0)
我试过的一种方法
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 C
1664 g 151 151
1887 k 85 85
1533 q 72 72
53 y 68 68
1793 t 62 62
通过
验证print len(df.loc[df["A"]=="g"])
给了我
151
所以我得到了预期的结果,因为我可以根据A列的计数看到前5个值。但是肯定有更好的方法可以做到这一点吗?