使用pandas DataFrame获取第10个最常见值的计数

时间:2016-06-21 23:52:49

标签: python numpy pandas dataframe series

我有一个包含place_ids条目的DataFrame,例如:

place_id
11111
11111
22222
33333
44444
44444
...

我想获得第10个最常值的数量。

以下是我提出的建议:

print df.place_id.value_counts().nlargest(10).tail(1).values[0]

这似乎太多了。是否有更简单的方法来获得第10个最常见的place_id的计数?

2 个答案:

答案 0 :(得分:2)

尝试:

import pandas as pd
import numpy as np
from string import ascii_letters

np.random.seed([3,1415])
s = pd.Series(np.random.choice(list(ascii_letters), (10000,)))

vc = s.value_counts().sort_values()
vc.loc[[vc.index[-10]]]

j    204
dtype: int64

答案 1 :(得分:1)

我认为你已经有了一个不错的解决方案。这是一个稍微快一点的替代方案,但是出于所有实际目的,它具有相同的性能:

In [165]: place_ids.value_counts().nlargest(10).tail(1).values[0]
Out[165]: 1057

In [166]: place_ids.value_counts().sort_values().iloc[-10]
Out[166]: 1057

仅供参考,对于不需要Series对象的小型列表,我喜欢集合中的Counter类(显然,如果你需要对大型对象进行转换,这会慢很多):

from collections import Counter
print Counter(place_ids).most_common(10)[-1][1] # reports 1057