2016-06-21 2 views
2

У меня есть DataFrame, содержащий записи о place_ids, таких как:Использование панд DataFrame получить отсчет 10 наиболее часто встречающееся значение

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

попробовать:

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 
+0

Спасибо. Это возвращает 10-е наиболее частое значение ('j'). Как получить счет этой стоимости? (Например, 15) Это то, что мне нужно. Я пытаюсь использовать его как порог, чтобы исключить менее частые place_ids. –

+0

сообщение обновлено. – piRSquared

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 

FYI, для небольших списков, которые не нужны объекты серии, мне нравится класс счетчика в коллекции (очевидно, это LOT медленнее, если вам необходимо выполнить преобразование больших объектов):

from collections import Counter 
print Counter(place_ids).most_common(10)[-1][1] # reports 1057 
Смежные вопросы