使用 pandas DataFrame 获取第 10 个最频繁值的计数

Using a pandas DataFrame to get the count of the 10th most frequent value

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

place_id
11111
11111
22222
33333
44444
44444
...

我想得到第 10 个最频繁值的计数。

这是我想出的:

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

这看起来工作量太大了。有没有更简单的方法来获取第 10 个最频繁的计数 place_id?

尝试:

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

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

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 对象的小列表,我喜欢集合中的计数器 class(显然,如果您需要转换大对象,这会慢很多):

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