Abt*_*Pst 3 python group-by count dataframe pandas
如果这是一个基本问题,请原谅我,但我是熊猫的新手。我有一个带有 A 列的数据框,我想根据 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
Run Code Online (Sandbox Code Playgroud)
请注意,这只是我实际使用的数据的一小部分样本。
因此,如果我们查看 A 列,值 x 出现了 4 次,y 出现了 2 次,z 出现了 1 次。如何根据此计数获得 A 列的前 n 个值?
print df.groupby(['A']).sum()
Run Code Online (Sandbox Code Playgroud)
这给了我
A B
x 6792117
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
print len(df.groupby(['A']).get_group('x'))
Run Code Online (Sandbox Code Playgroud)
我明白了
21
Run Code Online (Sandbox Code Playgroud)
此外
len(df.index)
Run Code Online (Sandbox Code Playgroud)
给我
23657
Run Code Online (Sandbox Code Playgroud)
这样的怎么算可以'A' == 'x'是6792117在该组的结果可知?我错过了什么?
更新
考虑
print df.groupby(['A']).describe()
Run Code Online (Sandbox Code Playgroud)
给我
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
Run Code Online (Sandbox Code Playgroud)
这是有道理的。我只想获得 A 列中具有最大计数的行。
更新2
我做了
print df.groupby(['A'],as_index=False).count()
Run Code Online (Sandbox Code Playgroud)
我明白了
A B C
0 x 21 21
1 y 11 11
2 z 8 8
Run Code Online (Sandbox Code Playgroud)
所以基本上,对于 A 列,标签 x 在 B 列中有 21 个条目,在 C 列中有 21 个条目。在我的情况下,ColumnsB 和 C 是唯一的。这很好。现在我如何获得关于 C 列的前 n 行?
更新3
所以我试过了
import heapq
print heapq.nlargest(3,df.groupby(['A'],as_index=False).count()['C'])
Run Code Online (Sandbox Code Playgroud)
我明白了
[151, 85, 72]
Run Code Online (Sandbox Code Playgroud)
所以我知道对于 A 列,我将上述计数作为前 3 个计数。但我仍然不知道这些计数指的是 A 列的哪个值?例如,A 列中的哪个值的计数为 151?有没有办法链接这些信息?
IIUC 你可以使用函数nlargest。
我尝试您的示例数据并按列获取前 2 行C:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13149 次 |
| 最近记录: |