квартиль python коллекция счетчиков - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть следующий список, в котором записывается частота счета случайных объектов:

counter_obj= [('oranges', 66), ('apple', 13), ('banana', 13), ('pear', 12), ('strawberry', 10), ('watermelon', 10), ('avocado', 8) ... ('blueberry',1),('pineapple',1)]

Я пытаюсь выбрать восемь элементов , выбрав случайным образом два объекта из каждого рангового квартиля .

Я пробовал следующее для первого (25%) квартиля:

from collections import Counter
dct = {('oranges', 66), ('apple', 13), ('banana', 13), ('pear', 12), ('strawberry', 10), ('watermelon', 10), ('avocado', 8) ... ('blueberry',1),('pineapple',1)}
[tup for tup in Counter(dct).most_common(len(dct)//4)] # 25th percentile by frequency count

Как могу ли я сделать для остальных 2 квартилей 50% и 75%, зная, что у меня много значений на 1 (они появляются только один раз)
Моя исходная диаграмма гистограммы: Гистограмма из моих исходных данных

1 Ответ

1 голос
/ 14 апреля 2020

Я бы использовал pandas для этой проблемы:

import pandas as pd

dct = {('oranges', 66), ('apple', 13), ('banana', 13), ('pear', 12), ('strawberry', 10), ('watermelon', 10), ('avocado', 8) , ('blueberry',1),('pineapple',1)}

df = pd.DataFrame(dct, columns = ['Fruit','Count'])  # convert to DataFrame


select = []

for quant in [.25,.5,.75,1]:
  curr_q = df['Count'].quantile(quant)  # this calculates the quantile value
  curr_choice = df[df['Count']<=curr_q].sample(2)  # this selects all rows of your dataframe within current quantile, then samples two of these rows
  select.append(curr_choice)


select = pd.concat(select).reset_index(drop=True)  # concatenates the selected rows to get a nice dataframe, resets the indices.
...