我有一个包含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的计数?
答案 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