【发布时间】:2016-03-12 08:30:41
【问题描述】:
如果这是一个基本问题,请原谅我,但我是熊猫新手。我有一个带有 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
请注意,这只是我实际使用的数据的一小部分。
因此,如果我们查看 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 在 group by 的结果中看到的?我错过了什么?
更新
考虑
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 列中具有最大计数的行。
更新2
我做到了
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 个条目。在我的情况下,列 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?有什么方法可以链接这些信息?
【问题讨论】:
-
请发布原始输入数据、代码以重现您的 df,目前这一切都是推测性的,没有数据和代码来重现您的观察结果
-
我认为downvote是因为您不使用您的样本数据。
-
您可以将使用的数据共享到保管箱或谷歌文档吗?因为我尝试使用您的示例数据,但我的输出与您的不同。
-
不幸的是,这些数据是专有的。顺便说一句,您尝试了什么?您可以将其发布为答案吗?
-
不,有问题。您可以尝试使用您的示例并通过此输入更改您的输出。最好的是发布您推荐的输出(来自您的示例数据)。
标签: python pandas count group-by dataframe